文件系统与标准I/O库
一、文件系统
1、 open
头文件 <fcntl.h> 成功返回文件描述符fd,失败返回-1
原型: int open(const char * path ,int oflag); 或 int open(const char * path ,int oflag, mode_t mode);
其中在C中,两种open不是重载关系(二是三的一种可选情况),第三个参数mode_t只在某些情况下可用。
其中Path是路径,oflag指示文件打开选项包括必选和可选(必选为O_RDONLY,O_WRONLY,O_RDWR),mode只有创建文件时候才需要,用于指定创建文件的权限位(收到umask影响)flag可选部分如下:
O_APPEND //追加到文件尾写 O_ASYNC //异步 IO
O_CLOEXEC //在打开文件时将文件描述符设置为FD_CLOEXEC。用于解决多线程fork与用fcntl设置FD_CLOEXEC竞争问题。
O_CREAT //文件不存在时创建该文件。使用此选项使要给出第三个参数Mode的值
O_DIRECT //对文件直接IO O_DIRECTORY //要求打开路径必须是目录
O_EXEL //用于确保是此次调用创建的文件,可以和O_CREAT一起用来测试文件是否存在,不存在则出错。和O_CREAT一起构成原子操作。
O_NONBLOCK、O_NDELAY //将该文件描述符设置为非阻塞的
O_SYNC //设置为I/O同步模式,每次写操作都会将数据同步到磁盘
O_TRUNC //在打开文件时候将文件长度阶段为0,需要和O_RDWR或O_WRONLY一起使用。
2、creat
头文件 <fcntl.h> 成功返回文件描述符fd,失败返回-1
原型:int creat(const char *path,mode_t mode); //以只写打开,相当于open(path,O_WRONLY|O_CREAT|O_TRUNC,mode);
3、close //用close关闭文件描述符fd适用于普通文件、设备、socket
头文件 <unistd.h>
原型: int close(fd); //成功返回0,失败返回 -1
注意:文件close时会释放进程加在文件上的锁。进程终止时,内核自动关闭所有它打开的文件
不close对于常驻进程将会不断申请新的文件描述符甚至扩展文件表。并申请新的空闲表结构
4、lseek文件偏移(读写从当前偏移开始,读写后更改偏移)打开文件默认偏移量为0,指定O_APPEND选项则不为0
头文件 <unistd.h>
原型: off_t lseek(int fd,off_t