文章目录
- 一、系统调用
- 1.open()
- 1.1 所需基础知识
- 1.2. open() 详解
- 1.3 示例代码
- 二、标准IO
- 三、高级IO
一、系统调用
1.open()
1.1 所需基础知识
Linux遵循一切皆是文件的理念,因此,很多的交互工作都是通过读取和写入文件来完成。
文件必须被打开才能被访问。文件可以以只读方式或者只写方式打开,或者两者兼有。一个打开的文件通过唯一的文件描述符进行引用,该描述符是打开文件的元数据至其本身的映射。在Linux内核中,这个描述符,用一个整数表示 (int) ,简写为fd。文件描述符在用户空间中共享,允许用户程序用文件描述符直接访问文件。
1.2. open() 详解
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>int open (const char* name, int flags);
int open (const char* name, int flags, mode_t mode);
flags参数必须是一下之一:
参数 | 含义 |
---|---|
O_RDONLY | 只读 |
O_WRONLY | 只写 |
O_RDWR | 读写模式 |
flags参数可以和以下一个或多个值进行按位或运算,用以修改打开文件请求的行为。
参数 | 含义 |
---|---|
O_APPEND | 追加模式打开,文件位置指针将被置于文件末尾 |
O_ASYNC | 当指定文件可写或者可读时产生一个信号(默认SIGIO) |
O_CREAT | 当指定的name文件不存在时,将由内核来创建 |
O_DIRECT | 打开文件用于直接I/O |
O_DIRECTORY | 如果name不是目录,open()调用将会失败,这个标志用于opendir()内部使用 |
O_EXCL | 和O_CREAT一起给出的时候,如果name给定的文件已经存在,则open()调用失败,用来防止文件创建时出现竞争 |
O_LARGEFILE | 给定文件打开时使用64位偏移量,这样大于2G的文件也能被打开 |
1.3 示例代码
代码示例