文件描述符

一、什么是文件描述符

        在Linux上一切皆文件,文件描述符是内核为了高效的管理已经被打开的文件所创建的索引,它是一个非负整数,用于指代被打开的文件,所有执行的I/O操作的系统调用都是文件描述符完成的。

在Linux中,进程是通过文件描述符来访问文件的,文件描述符实际上是一个整数,程序启动时默认有三个文件描述符,分别是:

0        stdin                 标准输入

1        stdout               标准输出

2        stderr                标准错误

3        ``````                    ```````                         标准规定,每次打开的文件时必须使用当前进程中最小可用的文件描述符号码。

二、如何创建文件描述符

进程获取文件描述符最常见的方法:open() 或create获取,或者从父进程继承

文件描述符对于每一个进程而言是唯一的,每一个进程都有一张文件描述符表;

从父进程继承,父进程打开的文件fork后,子进程通过其文件描述符也可以访问;

三、描述符对于服务器有什么作用

Linux上一切皆文件,与服务器联系起来主要是套接字文件描述符,每建立一个连接都需要与一个文件描述符关联起来,对数据的收发都依靠文件描述符来完成,通常服务器和客户端建立多少个连接就需要多少个文件描述符,所以简单讲,描述符的数据间接的决定了服务器能连接多少个客户端程序。

四、一个进程最大能打开多少个文件描述符,及用户级限制和系统级限制

一个进程最大能打开1024个文件描述符,但这个值可修改。

用户级限制:内核为了不让某一个进程消耗掉所有的文件资源,会对单个进程打开文件数做默认处理。
命令: ulimit -n可以查看当前用户级限制下进程能打开的文件最大的个数。
临时性修改: ulimit -SHn文件数可以修改用户级限制。

永久性修改:就必须修改/etc/ security/limits.conf配置文件。

                        在文件里面添加:hard nofile 文件数

                                                        soft nofile 文件数

                         然后保存退出重新登录,就可以。

系统级限制:  由于文件描述符是系统的一个重要资源,所以在实际过程中内核会对打开文件数做一个限制。

      命令: sysctl -a | grep fs.file-max可以查看当前的系统级限制能够打开的最大文件数。

     临时性修改:通过sysctl -w fs.file-max=文件数命令修改。

     永久性修改:需要在/etc/sysctl.conf中添加fs.file-max=文件数退出后并保存,使用sysctl -p命令使其生效。

五、文件描述符和文件指针的联系与区别

        文件指针: C语言中使用文件指针做为I/0的句柄。文件指针指向进程用户区中的一个被称为FILE结构的数据结构。FILE结构包括缓冲区和文件描述符。而文件描述符是文件描述符表的一一个索引,也就是说c语言的文件指针是Linux系统中对文件描述符的一种封装。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值