C语言中open与fopen的的解释和区别

一、open函数

  • 函数原型:int open(const char *path, int access, int mode);
  • 参数解释
  • path:要打开的文件路径和名称。
  • access:访问模式,宏定义和含义如下:
    – O_RDONLY(1):只读打开;
    – O_WRONLY(2):只写打开;
    – O_RDWR(4):读写打开;
    还可选择以下模式与以上3种基本模式相或:
    – O_CREAT(0x0100)创建一个文件并打开;
    – O_TRUNC(0x0200)打开一个已存在的文件并将文件长度设置为0,其他属性保持;
    – O_EXCL(0x0400)未使用;
    – O_APPEND(0x0800)追加打开文件;
    – O_TEXT(0x4000)打开文本文件翻译CR-LF控制字符;
    – O_BINARY(0x8000)打开二进制字符,不作CR-LF翻译;
  • mode:该参数仅在access=O_CREAT方式下使用,其取值如下:
    – S_IFMT(0xF000):文件类型掩码;
    – S_IFDIR(0x4000):目录;
    – S_IFIFO(0x1000):FIFO 专用;
    – S_IFCHR(0x2000):字符专用;
    – S_IFBLK(0x3000):块专用;
    – S_IFREG(0x8000):只为0x0000;
    – S_IREAD(0x0100):可读;
    – S_IWRITE(0x0080):可写;
    – S_IEXEC(0x0040):可执行;

二、fopen函数

  • 函数原型:FILE *fopen(char *filename, char *mode);
  • 参数解释
    filename:文件名称。
    mode:打开模式:
    • r:只读方式打开一个文本文件(该文件必须存在);
    • r+:可读可写方式打开一个文本文件(该文件必须存在);
    • w:只写方式打开一个文本文件(若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件);
    • w+:可读可写方式创建一个文本文件(若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件);
    • a:追加方式打开一个文本文件(若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留));
    • a+:可读可写追加方式打开一个文本文件(若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留));
    • rb:只读方式打开一个二进制文件(使用法则同r);
    • rb+:可读可写方式打开一个二进制文件(使用法则同r+);
    • wb:只写方式打开一个二进制文件(使用法则同w);
    • wb+:可读可写方式生成一个二进制文件(使用法则同w+);
    • ab:追加方式打开一个二进制文件(使用法则同a);
    • ab+:可读可写方式追加一个二进制文件(使用法则同a+);
  • 返回参数: 文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。

三、两者的区别

  • 前者属于低级IO,后者是高级IO。
  • 前者返回一个文件描述符,后者返回一个文件指针。
  • 前者无缓冲,后者有缓冲。
  • 前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
  • 后者是在前者的基础上扩充而来的,在大多数情况下,用后者。
  • 14
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值