目录
在Linux中,一切都是文件。程序可以通过文件描述操作文件。文件描述存储在进程的内核区,不能直接使用,因此Linux提供了文件描述符。文件描述符是文件描述在用户空间的引用,我们可以调用一系列系统函数,对文件描述符进行操作。
文件偏移
文件偏移是操作文件的指针,它规定了操作文件的位置。如,如果文件偏移在文件末尾,则写入文件时会在末尾写入。其实,文件偏移是一个整数,其值规定了文件偏移在第几字节。
文件描述和文件描述符
文件描述是系统范围表里的条目,它存储文件偏移,以及文件的标志。
文件描述符是一个非负整数,用于随后的系统调用。它是文件描述的引用。
文件描述符的创建和关闭
文件描述符的创建
在Linux中,我们有许多方法创建一个文件描述符,因为一切皆文件。但是,如果我们想要操作一个有路径的,存在磁盘上的正常的文件,需要先使用open(2)函数打开它:
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
使用前,需要引用头文件:
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
这个函数将会返回路径为pathname的文件的文件描述符,并在系统里创建一个新的文件描述。
参数flags表示访问模式,必须包括为O_RDONLY, O_WRONLY, 或O_RDWR,分别表示只读、只写,或既可读又可写。
另外,flags参数还可以与以下值进行位运算(有18个值,这里只列出前6个):
值 | 描述 |
---|---|
O_APPEND | 以追加模式打开文件,文件偏移将 |