头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
定义函数:
int open(const char * path, int aflag, .../* mode_t mode */);
int open(const char * path, int aflag, .../* mode_t mode */);
函数说明:
path参数是要打开或创建的文件的名字。aflag参数可用来说明此函数有多个选项。用下列一个或多个常量进行“或”运算构成aflag参数。
O_RDONLY 只读打开
O_WRONLY 只写打开
O_RDWR 读、写打开
O_EXEC 只执行打开
O_SEARCH 只搜索打开(应用于目录)
以上5个常量中必须也只能指定一个。
O_APPEND 每次写是都追加到文件的尾端
O_CLOEXEC 把FD_CLOEXEC常量设置为文件描述标志
O_CREAT 若此文件不存在则创建他
O_DIRECTORY 如果path引用的不是目录,则出错
O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错
O_NOCTTY 如果path引用的是终端设备,则不讲该是被分配作为此进程的控制终端
O_NOFOLLOW 如果path引用的是一个符号链接,则出错
O_NOBLOCK 如果path引用的是一个FIFO、一个块特殊文件或一个字符特殊文件,则将选项为文件的本次打开操作和后续的I/O操作设置为非阻塞方式
O_SYNC 使每次write等待物理I/O操作完成,包括由该write操作引起的文件属性更新所需的I/O
O_TRUNC 如果此文件存在,而且为只写或读-写成功打开,则将其长度截断为0
O_TTY_INIT 如果打开一个还未打开的终端设备,设置非标准termios参数值,使其符合 Single UNIX Specification
O_DSYNC 使每次write要等到物理I/O操作完成,但是如果改写操作并不影响读取刚写入的数据,则不需等待文件属性被更新
O_RSYNC 使每一个以文件描述符作为参数进行的read操作等待,知道所有对文件同意部分挂起的写操作都完成
第三个参数mode表示:设置文件访问权限的初始值。(与用户掩码umask变量有关,实际的访问权限有mode &~umask确定)
S_IRUSR, S_IWUSER, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH.
其中R:读,W:写,X:执行,USR:文件所属的用户,GRP:文件所属的组,OTH:其他用户。
注:第三个参数是在第二个参数中有O_CREAT时才用作用。若没有,则第三个参数可以忽略。
例子:
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main()
{
int fd, size;
char s[] = "Hello Linux!\n", buffer[80];
fd = open("/tmp/temp", O_WRONLY|O_CREAT);
write(fd, s, sizeof(s));
close(fd);
fd = open("/tmp/temp", O_RDONLY);
size = read(fd, buffer, sizeof(buffer));
close(fd);
printf("%s", buffer);
return 0;
}
执行结果 Hello Linux!