相较于维基百科,文件描述符的更简化描述是什么?它们为什么是必须的?以shell进程为例,它如何应用?
进程表是否包含多个文件描述符?如果是,为什么?
相较于维基百科,文件描述符的更简化描述是什么?它们为什么是必须的?以shell进程为例,它如何应用?
进程表是否包含多个文件描述符?如果是,为什么?
FILE=$1 # give the name of file in the command line
exec 5<>$FILE # '5' here act as the file descriptor
# Reading from the file line by line using file descriptor
while read LINE; do
echo "$LINE"
done <&5
# Writing to the file using descriptor
echo "Adding the date: `date`" >&5
exec 5<&- # Closing a file descriptor
文件描述符就是打开任何资源的引用。当您打开资源时,内核假定您将对其执行某些操作。程序和资源之间的所有通信都通过接口进行,并且此接口由文件描述符提供。
由于进程可以打开多个资源,因此资源可能具有多个文件描述符。
您可以通过运行以下命令查看与进程关联的所有文件描述符:
ls -li /proc//fd/
这里的pid是您的进程的进程ID。
虽然我不懂内核代码,但我想分享我的看法,因为我已经思考了一段时间,我认为这会很有用。
当你打开一个文件时,内核会返回一个文件描述符来与该文件交互。
文件描述符是你正在打开的文件的API实现。内核创建此文件描述符,将其存储在数组中,并将其提供给你。
这个API需要一个实现,允许你读写文件,例如。
现在,请再次思考我所说的话,记住一切都是文件——打印机、显示器、HTTP连接等等。
这是我在阅读https://www.bottomupcs.com/file_descriptors.xhtml后的总结。