文件描述符(file descriptor)是一个非负整数,内核用其来标识一个特定进程正在访问的文件,我来为大家科普一下关于文件的描述符和网络的描述符?下面希望有你要的答案,我们一起来看看吧!

文件的描述符和网络的描述符(文件描述符)

文件的描述符和网络的描述符

什么是文件描述符

文件描述符(file descriptor)是一个非负整数,内核用其来标识一个特定进程正在访问的文件。

当内核打开(open)一个现有文件或者创建(create)一个新文件时,都会返回一个文件描述符,在读(read)、写(write)文件时就会使用这个文件描述符(将文件描述符作为参数传递给read、write函数)。

特殊文件描述符

shell给每个进程分配了3个固定文件描述符:0、1、2,并且一旦进程启动这3个文件描述符就处于打开状态。

0:shell把文件描述符0与进程的标准输入(键盘输入)关联

1:shell把文件描述符1与进程的标准输出(输出到屏幕)关联

2:shell把文件描述符2与进程的标准错误(也是输出到屏幕)关联

在POSIX系统中,幻数0、1、2已被标准化为符号常量:STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,因此编程的时候要使用标准化符号常量。这些常量在<unistd.h>中,linux系统见:/usr/include/unistd.h

/* Standard file descriptors. */ #define STDIN_FILENO 0 /* Standard input. */ #define STDOUT_FILENO 1 /* Standard output. */ #define STDERR_FILENO 2 /* Standard error output. */

文件描述符的上限

文件描述符的变化范围是0~OPEN_MAX-1。OPEN_MAX值可以通过系统调用函数sysconf类获取。

//man sysconf OPEN_MAX - _SC_OPEN_MAX The maximum number of files that a process can have open at any time. Must not be less than _POSIX_OPEN_MAX (20).

#include <stdio.h> #include <unistd.h> int main() { printf("The open max:%ld\n", sysconf(_SC_OPEN_MAX)); return 0; }

现在的操作系统,文件描述符的变化范围几乎是无限制的,它只受内存、整型字长以及配置的limit的约束。

,