加入收藏 | 设为首页 | 会员中心 | 我要投稿 济南站长网 (https://www.0531zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

linux系统编程基础(三)文件描述符file descriptor与inode的相关知识

发布时间:2016-09-25 00:15:10 所属栏目:Linux 来源:站长网
导读:每个进程在Linux内核中都有一个task_struct结构体来维护进程相关的 信息,称为进程描述符(Process Descriptor),而在操作系统理论中称为进程控制块 (PCB,Process

每个进程都可以通过一个特殊的设备文件/dev/tty(字符设备c) 访问它的控制终端。事实上每个终端设备都对应一个不同的设备文件,/dev/tty 提供了一个通用的接口,一个进程要访问它的控制终端既可以通过/dev/tty 也可以通过该终端设备所对应的设备文件来访问。ttyname函数可以由文件描述符查出对应的文件名,该文件描述符必须指向一个终端设备而不 能是任意文件。不同的终端所对应的设备文件名可以是/dev/pts/?, /dev/tty?等

simba@simba-Aspire-4752:~$ ls -l /dev/tty

crw-rw-rw- 1 root tty 5, 0 Jan 29 09:46 /dev/tty

开头的c表示文件类型是字符设备。中间的5, 0是它的设备号,主设备号5,次设备号0,主设备号 标识内核中的一个设备驱动程序,次设备号标识该设备驱动程序管理的一个设备。内核通过设备号 找到相应的驱动程序,完成对该设备的操作。我们知道常规文件的这一列应该显示文件尺寸,而设 备文件的这一列显示设备号,这表明设备文件是没有文件尺寸这个属性的,因为设备文件在磁盘上 不保存数据,对设备文件做读写操作并不是读写磁盘上的数据,而是在读写设备。

由open 返回的文件描述符一定是该进程尚未使用的最小描述符。由于程序启动时自动打开文件描述符0、1、2,因此第一次调用open打开文件通常会返回描述符3,再调用open 就会返回4。可以利用 这一点在标准输入、标准输出或标准错误输出上打开一个新文件,实现重定向的功能。例如,首先 调用close 关闭文件描述符1,然后调用open 打开一个常规文件,则一定会返回文件描述符1,这时候标准输出就不再是终端,而是一个常规文件了,再调用printf就不会打印到屏幕上,而是写到这 个文件中了。

需要说明的是,当一个进程终止时,内核对该进程所有尚未关闭的 文件描述符调用close 关闭,所以即使用户程序不调用close ,在终止时内核也会自动关闭它打开的 所有文件。但是对于一个长年累月运行的程序(比如网络服务器),打开的文件描述符一定要记得 关闭,否则随着打开的文件越来越多,会占用大量文件描述符和系统资源。

------------------------------------------------------------------------------------------------------------------------------------

(编辑:济南站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读