linux系统中open函数的使用open函数

大耗子 2020年03月29日 232次浏览

文章链接:https://codemouse.online/archives/2020-03-29201722

open函数的定义:

#include <sys/types.h>  
#include <sys/stat.h>
#include <fcntl.h>
int open( const char * pathname, int flags);
int open( const char * pathname,int flags, mode_t mode);
  • flags参数:

    1. O_RDONLY 只读打开。
    2. O_WRONLY 只写打开。
    3. O_RDWR 读、写打开。
    4. O_APPEND 每次写时都加到文件的尾端。
    5. O_CREAT 若此文件不存在则创建它。使用此选择项时,需同时说明第三个参数mode,用其说明该新文件的存取许可权位。
    6. O_EXCL 如果同时指定了O_CREAT,而文件已经存在,则出错。这可测试一个文件是否存在,如果不存在则创建此文件成为一个原子操作。
    7. O_TRUNC 如果此文件存在,而且为只读或只写成功打开,则将其长度截短为0。
    8. O_NOCTTY 如果pathname指的是终端设备,则不将此设备分配作为此进程的控制终端。
    9. O_NONBLOCK 如果pathname指的是一个F I F O、一个块特殊文件或一个字符特殊文件,则此选择项为此文件的本次打开操作和后续的I / O操作设置非阻塞方式。
    10. O_NDELAY所产生的结果使I/O变成非阻塞模式(non-blocking),在读取不到数据或是写入缓冲区已满会马上return,而不会阻塞等待。
    11. O_SYNC 使每次w r i t e都等到物理I / O操作完成。
    12. O_APPEND 当读写文件时会从文件尾开始移动,也就是所写入的数据会以附加的方式加入到文件后面。
    13. O_NOFOLLOW 如果参数pathname 所指的文件为一符号连接,则会令打开文件失败。
    14. O_DIRECTORY 如果参数pathname 所指的文件并非为一目录,则会令打开文件失败。

  • mode参数:

    可以直接写权限数值,也可以写以下宏:

    S_IRWXU 00700 权限,代表该文件所有者具有可读、可写及可执行的权限。
    S_IRUSR 或S_IREAD,00400权限,代表该文件所有者具有可读取的权限。
    S_IWUSR 或S_IWRITE,00200 权限,代表该文件所有者具有可写入的权限。
    S_IXUSR 或S_IEXEC,00100 权限,代表该文件所有者具有可执行的权限。
    S_IRWXG 00070权限,代表该文件用户组具有可读、可写及可执行的权限。
    S_IRGRP 00040 权限,代表该文件用户组具有可读的权限。
    S_IWGRP 00020权限,代表该文件用户组具有可写入的权限。
    S_IXGRP 00010 权限,代表该文件用户组具有可执行的权限。
    S_IRWXO 00007权限,代表其他用户具有可读、可写及可执行的权限。
    S_IROTH 00004 权限,代表其他用户具有可读的权限
    S_IWOTH 00002权限,代表其他用户具有可写入的权限。
    S_IXOTH 00001 权限,代表其他用户具有可执行的权限。

  • 例子

    #include <sys/types.h>  
    #include <sys/stat.h>
    #include <fcntl.h>
    int fd;
    fd = open("./test.c",O_CREAT | O_RDONLY,0644);