File descriptor
ABOUT
文件描述符(File descriptor)是计算机科学中的一个术语,是一个用于表述指向文件的引用的抽象化概念。
CONTENT
1. 概要
- 1.1. 优点
- 1.2. 缺点
- 1.3. 其他
2. 与文件描述符相关的操作
- 2.1. 文件描述符的生成
- 2.2. 与单一文件描述符相关的操作
- 2.3. 与复数文件描述符相关的操作
- 2.4. 与文件描述符表相关的操作
- 2.5. 改变进程状态的操作
- 2.6. 与文件加锁的操作
- 2.7. 与套接字相关的操作
- 2.8. 其他
3. 注释
NOTES
概要
文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向内核为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。在程序设计中,一些涉及底层的程序编写往往会围绕着文件描述符展开。但是文件描述符这一概念往往只适用于 UNIX、Linux 这样的操作系统。
每个Unix进程(除了可能的守护进程)应均有三个标准的POSIX文件描述符,对应于三个标准流:
```
整数值 名称
优点
文件描述符的优点主要有两个:
基于文件描述符的I/O操作兼容POSIX标准。
在UNIX、Linux的系统调用中,大量的系统调用都是依赖于文件描述符。
例如,下面的代码就示范了如何基于文件描述符来读取当前目录下的一个指定文件,并把文件内容打印至Console中。
```
#include
int main (void){ int fd; int numbytes; char path[] = “file”; char buf[256];
/*
- O_CREAT:如果文件不存在则创建
- O_RDONLY:以只读模式打开文件
*/ fd = open(path, O_CREAT | O_RDONLY, 0644); if(fd < 0){ perror(“open()”); exit(EXIT_FAILURE); }
memset(buf, 0x00, 256);
while((numbytes = read(fd, buf, 255)) > 0){
printf("%d bytes read: %s", numbytes, buf);
memset(buf, 0x00, 256);
}
close (fd);
exit(EXIT\_SUCCESS);
} ``` 此外,在Linux系列的操作系统上,由于Linux的设计思想便是把一切设备都视作文件。因此,文件描述符为在该系列平台上进行设备相关的编程实际上提供了一个统一的方法。
缺点
文件描述符的概念存在两大缺点: