分享

Linux内核

 cuibaofeng 2015-11-04

1.表头文件 #include<sys/types.h>
                  #include<sys/stat.h>
                  #include<fcntl.h> 


2.定义函数 int open( const char * pathname, int flags);
                   int open( const char * pathname,int flags, mode_t mode);

       对于 open 函数来说,第三个参数(...)仅当创建新文件时才使用,用于指定文件的访问权限。pathname 是待打开/创建文件的路径名;oflag 用于指定文件的打开/创建模式,这个参数可由以下常量(定义于 fcntl.h)通过逻辑或构成。

      O_RDONLY       只读模式
      O_WRONLY      只写模式
      O_RDWR          读写模式

以上三者是互斥的,即不可以同时使用。打开/创建文件时,至少得使用上述三个常量中的一个。以下常量是选用的:

      O_APPEND       每次写操作都写入文件的末尾
      O_CREAT        如果指定文件不存在,则创建这个文件
      O_EXCL         如果要创建的文件已存在,则返回 -1,并且修改 errno 的值
      O_TRUNC        如果文件存在,并且以只写/读写方式打开,则清空文件全部内容
      O_NOCTTY       如果路径名指向终端设备,不要把这个设备用作控制终端。
      O_NONBLOCK     如果路径名指向 FIFO/块文件/字符文件,则把文件的打开和后继 I/O设置为非阻塞模式(nonblocking mode)。

以下三个常量同样是选用的,它们用于同步输入输出

     O_DSYNC        等待物理 I/O 结束后再 write。在不影响读取新写入的数据的前提下,不等待文件属性更新。
     O_RSYNC        read 等待所有写入同一区域的写操作完成后再进行
     O_SYNC         等待物理 I/O 结束后再 write,包括更新文件属性的 I/O

 

3.返回值:成功则返回文件描述符,否则返回 -1。 

      返回文件描述符(整型变量0~255)。由open 返回的文件描述符一定是该进程尚未使用的最小描述符。只要有一个权限被禁止则返回-1。

 

4.错误代码:(均已E开头,将其去掉就是有关于错误的方面的单词或单词的缩写)

       EEXIST 参数pathname 所指的文件已存在,却使用了O_CREAT和O_EXCL旗标。
       EACCESS 参数pathname所指的文件不符合所要求测试的权限。
       EROFS 欲测试写入权限的文件存在于只读文件系统内。
       EFAULT 参数pathname指针超出可存取内存空间。
       EINVAL 参数mode 不正确。
       ENAMETOOLONG 参数pathname太长。
       ENOTDIR 参数pathname不是目录。
       ENOMEM 核心内存不足。
       ELOOP 参数pathname有过多符号连接问题。
       EIO I/O 存取错误。


 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多