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等配合使用。
  • 后者是在前者的基础上扩充而来的,在大多数情况下,用后者。

你可能感兴趣的:(other)