(二)文件I/O 2.open函数说明

    调用open函数可以打开或创建一个文件:
    #include <fcntl.h>   
    int open (const char *pathname,int flags,.../*mode_t mode*/ );

                               返回值:若成功返回文件描述符,若出错返回-1;
    第三个参数写为...,表示余下参数的数量及类型根据具体的调用会有所不同。而对于open函数而言,
    仅当创建新文件时才使用第三个参数。

    参数说明:
    pathname
       是要打开或创建文件的名字(绝对路径/相对路径 + 文件名字);

    flags
       参数可用来说明此函数的多个选项。用以下一个或者多个常量进行“或”(|)运算构成flags参数。
     (这些参数定义在<fcntl.h>头文件中);
       O_RDONLY 只读打开
       O_WRONLY 只写打开
       O_RDWD 读、写打开

       以上常量必须指定一个且只能指定一个。以下为可选常量:

       O_APPEND     每次写时都追加到文件尾端(且为原子操作)。
       O_CREAT        若此文件不存在,则创建它。使用该常量,需要第三个参数mode,
                                 用以指定该文件的访问权限,如0644。
       O_EXCL           如果同时指定了O_CREAT,而文件已存在,则会出错。用此可以测试一个文件是否存在,
                                 如果不存在,则创建该文件,这使得测试与创建成为原子操作。
       O_TRUNC       如果此文件存在,而且为只写或读写成功打开,则将其长度截短为0。
       O_NOCTTY     如果pathname指的是终端设备,则不将该设备分配为此进程的控制终端
       O_NOBLOCK 如果pathname指的是一个FIFO(管道文件),一个块特殊文件或一个字符特殊文件,
                                  则此选项为文件的本次打开操作和后续I/O操作设置非阻塞模式。
       O_DSYNC 使每次write等待物理I/O操作完成,但是如果写操作并不影响读取刚写入和输出选项的一部分。
       O_RSYNC 使每一个以文件描述符作为参数的read操作等待,直至任何对文件同一部分进行的未决写操作都完成。
       O_SYNC 使每次write都等到物理I/O操作完成,包括write操作引起的文件属性更新所需的I/O。

      由open返回的文件描述符一定是最小的未用描述符值。

     

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys.stat.h>
int main(void)
{
    int fd; 
   /*打开第一个代码注释,执行两次,将报错open : File exists,原因是启用了O_EXCL*/
   /*0600表示权限,往后会有描述,此数字表示用户有读写权限,没有执行权限*/
    //fd = open("./test.txt",O_RDONLY|O_RSYNC|O_CREAT|O_EXCL,0600);
    //fd = open("./test.txt",O_RDONLY);
    //fd = open("./test.txt",O_WRONLY|O_CREAT|O_TRUNC,0600);
    //fd = open("./test.txt",O_WDWR); 
    //fd = open("./test.txt",O_RDWR|O_CREAT|O_TRUNC,0600);
    fd = open("./test.txt",O_RDWR|O_CREAT|O_APPEND,0600);
    if(fd == -1) 
    {   
        perror("open");//打印出错信息
        return 1;
    }   
  
    printf("open success : %d\n",fd);//打印成功打开文件的描述符号
    close(fd);//关闭文件描述符,往后会说明
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值