1.文件打开
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int open(const char *pathname, int flags, mode_t mode);
功能: 打开或创建文件
参数1:打开的文件的路径,包括文件名 (路径:可以是绝对路径 也可以是相对路径)
参数2:打开文件的方式
参数3:对新文件的访问权限 (可有可无) 如果参数2是O_CREAT 则参数3生效
返回值:成功返回文件描述符 ,失败返回 -1
2.文件描述符的分配规则
当前尚未分配的最小的非负整数
3.标准流:
标准输入--键盘 0
标准输出 -屏幕 1
标准错误输出-屏幕 2
4. 文件的权限
(1) ls -l //显示文件的详细信息
drwxrwxr-x 2linux linux 4096 Jul 31 23:28 hao
-rw-rw-r-- 1linux linux 0 Jul 26 19:49 file.c
文件属性 文件所有者 文件所属组 文件大小 文件创建时间 文件名
(2) 第一个字符代表文件类型
d 表示这个文件是目录
- 表示这个文件是普通文件
c 表示这个文件是字符设备文件
l 表示这个文件是链接文件
b 表示这个文件是块设备文件
s 表示这个文件是套接字文件
p 表示这个文件是管道文件
(3) rwx rwx r-x //r 可读 w 可写 x 可执行
第一个rwx 代表文件所有者对文件的访问权限 读写执行
第二个rwx 代表文件所属组对文件的访问权限 读写执行
第三个r-x 代表其他用户对文件的访问权限 读和执行
(4) chmod 更改文件的访问权限
linux@ubuntu:~$ chmod +x test.c //增加执行权限
linux@ubuntu:~$ chmod -x test.c //去掉执行权限
(5) 注意:
1、文件的默认权限是没有x的,即文件的最大默认权限为666(-rw-rw-rw)
2、由于进入目录和目录的x权限有关,故目录的最大默认权限为777(drwxrwxrwx)
5.写入
#include <unistd.h>
ssize_t write(int fd, const void *buf, size_t count);
功能:将数据写入文件
参数: fd:文件
buf:要写的数据存放的位置
count:想写多少
返回值: ssize_t 有符号整型
成功:返回实际写入的字节数
失败 :返回 -1
6.读取
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
功能:从文件中读数据
参数: fd:从fd关联的文件读数据
buf:读到的数据存放的位置
count:最多读多大
返回值: 成功: 返回实际读到字节数
失败:-1
读到文件结尾 返回0
7.关闭文件
#include <unistd.h>
int close(int fd);
功能:关闭文件fd
返回值:成功:返回0
失败:-1
8.flag之
O_CREAT
如果文件不存在 则创建 如果文件存在 则打开
O_EXCL
测试文件是否存在 如果O_CREAT时 文件已经存在 则open返回错误信息
O_TRUNC:
清空文件内容
O_WRONLY
只写方式打开文件
O_RDONLY
只读
O_APPEND
以追加方式打开文件 读写会从文件末尾开始
O_RDWR
读写方式
9.文件位置指针定位
#include <sys/types.h>
#include <unistd.h>
off_t lseek(int fd, off_t offset, int whence);
功能:文件位置指针定位
参数: fd:文件
offset:偏移
whence:参照
SEEK_SET 文件起始位置 lseek(fd,2,SEEK_SET);//相对文件起始位置 向右偏移2个字节
SEEK_END 文件的末尾 lseek(fd,-2,SEEK_END);//相对文件末尾 向左偏移2个字节
SEEK_CUR 当前位置 lseek(fd,3,SEEK_CUR);//相对当前位置 向右偏移3个字节
返回值: 成功:返回文件位置指针相对于文件起始位置的偏移
失败:-1