对linux内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。
UNIX系统shell使用文件描述符0与标准输入相关联,文件描述符1与标准输出相关联,文件描述符2与标准出错相关联。
0------STDIN_FILENO
1------STDOUT_FILENO
2------STDERR_FILENO
本节中讲述open函数,调用open函数可以打开或创建一个文件。
#include
#include
#include
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
为啥会有两个函数原型呢?下面会解释到
首先对入参进行说明,
1) pathname---------简单,路径+文件名
2) flags
O_APPEND--------------每次写文件时都追加到文件末尾
O_CREAT----------------若文件不存在,则创建它,此时使用第三个入参mode,这里也就说明了如果使用了O_CREAT标记,必须有mode,如果没有使用O_CREAT标记,则不需要mode入参,这就是为啥有两个函数原型的原因了
O_TRUNC----------------如果文件已经存在,并且是普通文件,打开模式允许写操作(即O_WRONLY,O_RDWR),该文件会被裁减到0.
O_EXCL--------------保证调用open函数必须创建文件,如果与O_CREAT同时使用,并且将要打开的文件已经存在,那么open将会出错。值得注意的是,如果O_CREAT没有指定,那么O_EXCL行为是未定义的。说明O_EXCL和O_CREAT必须同时存在。
3)mode
只用当open的第二个入参中包含O_CREAT时,才需要使用mode。mode指的是文件的访问权限。
S_IRUSR---------------------用户读
S_IWUSR--------------------用户写
S_IXUSR---------------------用户执行
S_IRGRP---------------------用户组读
S_IWGRP--------------------用户组写
S_IXGRP---------------------用户组执行
S_IROTH---------------------其它读
S_IWOTH--------------------其它写
S_IXOTH---------------------其它执行
阅读(1040) | 评论(0) | 转发(0) |