24.8.9学习目录
一.C库中的IO操作
1.文件描述符
Linux将系统调用打开或者新建的文件用非负整数来表示,而这个非负整数就是文件描述符。
程序运行起来后会为每个进程分配文件描述符表,其放置在内核,其使用位图来记录。
并且每个进程都会打开三个文件描述符:
- 0:标准输入设备 scanf
- 1:标准输出设备 printf
- 2:标准错误输出 perror
(1).查看当前系统文件描述符最大数量
ulimit -a
修改其最大值
ulimit -n 2048
2.文件IO的操作
常用操作:open、close、read、write
(1)、打开文件open
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
//用于打开已存在的文件
int open(const char *pathname,int flags);
//打开不存在的文件,mode是指定新建文件时文件在磁盘上的权限
int open(const char *pathname,int flags,mode_t mode);
flags文件的操作权限(必选项):
取值 | 含义 |
---|---|
O_RDONLY | 以只读的方式打开 |
O_WRONLY | 以只写的方式打开 |
O_RDWR | 以可读、可写的方式打开 |
可选项,和必选项按位或起来(使用 | ):
取值 | 含义 |
---|---|
O_CREAT | 文件不存在则创建文件,需要使用mode说明文件权限 |
O_EXCL | 如果同时指定O_CREAT,且文件已经存在,则出错 |
O_TRUNC | 如果文件存在,则清空文件内容 |
O_APPEND | 写文件时,数据添加到文件末尾 |
O_NONBLOCK | 对于设备文件,以O_NONBLOCK方式打开可以做到非阻塞I/O |
mode_t为数值,格式为0xxx,x的最大值为7,最小值为1
可读(4),可写(2),可执行(1)用这三个进行组合
(2)关闭文件close
#include <unistd.h>
int close(int fd);
close工作步骤:
先将文件描述符的数量减一,如当文件在多线中中多次打开,某个线程关闭文件,只是关闭其与文件的连接;
当文件描述符为0时,系统会回收文件描述符的内核空间;
(3)写数据write
#include <unistd.h>
ssize_t write(int fd,const void *buf,size_t count);
buf:为写入内容的首地址
(4)读文件read
#include <unistd.h>
ssize_t read(int fd,void *buf,size_t count);