文件IO函数详解(1)-open函数

函数作用:在进程中打开文件和创建文件,如果成功则返回一个文件描述符。


函数原型:

    引用头文件:#include<fcntl.h>
    int open(const char* pathname, int oflag,...);
    int open(const char* pathname, int oflag,mode_t mode);

函数参数:

1.第一个参数pathname:要打开或者创建的文件名
2.第二个参数oflag:用于指定文件打开模式、标志等信息。
3.第三个参数mode:用来设置创建文件的权限(rwx)。当oflag中带有O_CREAT时才有效。


  • oflag:文件打开模式标志
    以下三个标志必须指定一个且只能指定一个

  • O_RDONLY : 只读打开

  • O_WRONLY : 只写打开
  • O_RDWR : 读写打开

其他文件标志:下面的标志是可以选择的,可通过C语言的或运算与文件打开标志进行组合


  • 其他文件标志:
  • O_APPEND:以后每次写文件时都会先将当前文件偏移量设置到文件末尾,但是读文件时时不影响。简单讲就是每次写的数据都添加到文件尾
  • O_TRUNC:若此文件存在,并以读写或只写打开,则文件长度为0(打开文件的同时将文件中的内容清除)
  • O_CREAT:若文件不存在,则创建该文件。此时,open函数需要第三个参数,用于指定该文件的访问权限位(后面描述)
  • O_EXCL:若同时指定了O_CREAT标志,而文件已经存在,则会出错。可用于测试文件是否存在
  • O_NOCTTY:如果打开的文件是终端设备,则不将此设备设置为进程的控制终端
  • O_NONBLOCK:如果打开的文件是一个管道、一个块设备文件或一个字符设备文件,则后续的I/O操作均设置为非阻塞方式
  • O_SYNC:使每次write都等到物理I/O操作完成

返回值:整型数据

  • 调用成功时返回一个文件描述符fd
  • 调用失败时返回-1,并修改errno
    #include<string.h>
     char* strerror(int errno);

注:出错处理
errno.h头文件中,定义了errno:当API调用出错时,errno说明出错的具体原因可简单地将errno理解成整型数据出错信息转换成可读字符串.

其它小点:

  • open函数返回的文件描述符fd一定是未使用的最小的文件描述符。
  • 如果文件不存在,而且又使用了O_CREAT标志,也就是会创建文件,创建文件时会给文件一定的权限,但是这个权限并不会限制该进程后面对该文件的操作。
  • 当mode参数是由八进制数字给出的时候,如 0777 .要纠正一个错误,就是之前我认为 权限数字前面的 0 代表的是八进制的含义,其实并不是这样的,前面的 0 代表了权限修饰位,也就是set-user-id位、set-group-id位和sticky这三位的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值