文件IO
七种基本文件类型
真实存在的文件
-:普通文件
d:文件夹
l:软连接 伪文件
c:字符设备
b:块设备
p:管道
s:套接字
注:伪文件的本质是内核中的一块缓冲区文件
文件描述符:默认0-1023
操作系统分配文件描述符的规则:分配一个当前可用最小的
0标准输入 STDIN_FILENO
1标准输出STDOUT_FILENO
2标准错误STDERR_FILENO
Open
函数原型: int open(const cha *pathname,intflags);
参数:
pathname:想要打开的文件路径名
flags:O_RDONLYO_WRONLY O_RDWR 中的一个
返回值:一个新的文件描述符
Int open(const char *pathname,int flags,mode_t mode);
O_RDONLY:以只读权限打开文件
O_WRONLY:以只写权限打开文件
O_RDWR:以读写权限打开文件
要求文件的权限要大于等于文件打开的权限
O_CREAT:只能用于第三个参数的open,当打开的文件不存在的时候创建文件,新创建的文件的权限遵从open的第三个参数mode_t mode,mode是一个三位的八进制数: 0644,解释:0表示八进制,6表示文件的所有者拥有rw-权限,4表示所属组拥有r--权限,4表示其他人拥有r--权限。(注意:最终创建的文件的权限不一定等于mode)(实际得到的文件权限 = mode&~umask)
O_TRUNC: 表示将文件截断为0
O_APPEND: 表示追加
O_EXCL:必须用在三个参数的open,并且必须喝O_CREAT一起用,当指定O_CREAT|O_EXCL时,如果open的文件已经存在,open返回-1。
O_XXX宏定义在fcntl.h
O_NONBLOCK:以非阻塞的形式打开文件
write
函数原型:ssize_t write(int fd,constvoid*buf,size_t count);
参数:
fd:目标文件的文件描述符
buf:要写入文件的源数据,一个缓冲区,常传数组
count:要写入的字节数,要求count<=sizeof(buf);
返回值:
写入成功,返回成功写入的字节数
写入失败:返回-1
read
函数原型;ssize_t read(int fd,void*buf,size_count);
参数:
fd;目标文件的文件描述符
buf:一个缓存区,用于存储从文件中读到的数据
count:要读取的字节数,要求count<=sizeof(buf);
返回值:
读取成功辉返回成功读到的字节数
>0 主义read 的返回值<= count
=0 读到了文件的末尾
读取失败 返回-1
close
函数原型: int close(int fd);
参数:fd 要关闭的文件描述符
返回值:成功返回0,失败返回-1
问题:文件描述符为什么需要关闭
1.文件描述符属于有限资源
2.程序执行很短时间不会造成问题,如果程序运行时间比较长,需要持续打开新的文件,如果不用的文件描述符没有释放,最终文件描述符会消耗殆尽,导致无法打开新的文件