文件描述符标志用于一个进程中的 一个文件描述符,
文件属性标志应用于指向该给定文件结构的任何进程中的所有文件描述符。
调用
fcntl
函数可以获得和修改文件描述符标志和文件属性标志。
文件描述符
- 对于内核而言,所有打开的文件都通过文件描述符引用。
- 文件描述符是一个非负整数。
- 当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。
- 当读、写一个 文件时,使用 open 函数或者 creat 函数返回的文件描述符标识该文件,可将此文件描述符作为参数传递给 read 函数或 write 函数。
- 文件描述符是从 0 开始一直到一个最大值的整型数字(_POSIX_OPEN_MAX),每一个打开的文件都有一个或者多个(dup)文件描述符与之对应。
- 绝大多数操作系统打开文件时总是使用一个最小的且未使用的文件描述符作为新分配的文件描述符。
- 根据习惯,0 号文件描述符代表标准输入,1 号文件描述符为标准输出,2 号文件描述 符为标准错误。这里需要说明的是, 每个进程拥有自己的文件描述符表,各个进程间互不冲突。如果子进程存在父进程,则继承父进程所有文件描述符;如果子进程是孤儿进程,将只继承系统的 3 个标准文件描述符。
- 一个进程内的所有线程共享进程文件描述符。
- 内核中存在一个全局的文件描述符表,这个文件描述符表不包含 0,1,2 号标准文件,这三个文件描述符在内核中为重映射标志,即 SylixOS 允许内核中每个内核任务拥有自己的标准文件。
文件属性标志
文件打开标志即文件属性标志。在文件I/O操作时会使用到文件属性标志,例如open函数的参数中就要包括该参数
int open(const char *cpcName, int iFlag, ...);
参数 iFlag 是打开文件标志,通常包含多个选项,如下图 所示,多个选项之间通常以“或”的方式来构成此参数。