linux的I/O操作分为:
- 不带缓存的I/O操作(read(),write(),open(),lseek(),close())。
- 标准(带缓存)的I/O操作:(fgets(),fread(),fwrite()).
文件描述符:
首先,在LINUX中对目录和设备都等同与于文件操作,LINUX中的文件主要分为:普通文件,目录文件,链接文件和设备文件,那么系统是怎么区分和引用特定的文件的呢?
文件描述符---对LINUX而言,所有对设备和文件的操作都通过使用文件描述符进行的,在open已经存在的文件或者creat一个新的文件时,内核就会向进程返回一个文件描述符,以后要对该文件的操作都可以通过使用该文件描述符(将文件描述符做为参数传递给相应的读(read(),写write()函数)来进行.
在lINUX系统中一个进程启动时都会打开3个文件:标准输入,标准输出,标准出错处理,分别对应文件描述符为0,1,2(宏替换STDIN_FILENO,STDOUT_FILENO,STDERR_FILENO)
不带缓存操作的I/O操作函数:
-
1 open函数
-
功能:打开一个已经存在的文件或者创建一个新的文件. 函数原型如下
#include <fcntl.h> - int open(const char *pathname,int oflag,mode_t mode);
- 返回值:
- 成功:返回文件描述符
- 出错:返回-1
- pathname:要打开或者要创建的文件名,
- oflag: O_RDONLY 只读打开
- O_WRONLY 只写打开
- O_RDWR 读写方式打开
- 以上三个常量必须指定一个且只能指定一个
-
- O_APPEND 每次写时都追加到文件的未端
- O_CREAT 若打开的文件不存在,则创建一个新文件,使用这个选项时,第三个参数mode指定创建新文件时的文件权限
- LINUX的文件权限: r 可读取 w可写入 x可执行 -无权限
- 文件权限的表示: 10个字符表示.如drwx------
- 第一位:表示文件的类型
- 第二位到第四位:表示文件所有者的访问权限
- 第五位到第七位:表示文件所有者同组用户访问的权限
- 第八位到第十位:表示其它用户的访问权限
新建文件的默认权限=新建文件的约定权限(linux 文件的约定权限是0666)-umask表示的权限
新建目录的默认权限=新建目录的约定权限(LINUX目录的约定权限是0777) - umask表示的权限
O_TRUNC 如果文件存在,而且为只写或者读写的方式打开,则将文件的长度截短为0
O_NOCTTY 如果pathname指的是终端设备 则不将这个设备作为此进程的控制终端
O_NONBLOCK 如果pathname指的是一个FIFO,一个块特殊文件或者一个字符特殊文件,则此选项为文件的本次打开操作和后续的I/O操作设置非阻塞模式
O_DSYNC
O_RSYNC
O_SYNC