fopen()#include <stdio.h> FILE *fopen(const char *path, const char *mode); mode 指定文件的打开模式: 返回值
fopen() 的返回值是一个 FILE 类型的指针,若打开失败则返回 NULL。 open()#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode);flags 用于指定文件的打开/创建模式,这个参数可由以下三个互斥的常量(定义于 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 |
mode 和 fopen() 函数的 mode 参数相同。 需要注意的是,当 flags 为 O_CREAT 或 O_TMPFILE 时,必须提供 mode 参数;否则 mode 参数将不起作用。 返回值
open() 的返回值是一个 int 类型的文件描述符,打开失败返回 -1。 区别- 前者(open)属于低级IO(用于驱动编写),后者(fopen)是高级IO。
- 前者返回一个文件描述符,后者返回一个文件指针。
- 前者无缓冲,后者有缓冲。
- 前者与 read, write 等配合使用, 后者与 fread, fwrite等配合使用。
- 后者是在前者的基础上扩充而来的,在大多数情况下,用后者。
- fopen() 是 C 标准库中的函数,而 open() 是 Linux 中的系统调用函数。
|