当我第一次学习 Linux 时,我被告知几乎Linux 中的一切都是文件。今天早上,当我向我女朋友重复这句话时。她问什么不是?我找了半天的例子。
所以我的问题是 Linux 中什么不是文件?
最佳答案
差不多了。 Posix 中的几乎所有内容都是通过文件描述符来处理的。这意味着用于文件操作的相同函数也适用于管道、套接字和硬件设备。这也意味着,如果您使用 select
(或其更好的替代方案之一),您可以在程序中设置一个点来等待所有可能的输入。
话虽如此,Posix 中的某些东西,特别是 Linux 中,绝对不是文件。
最明显的是信号。它们的处理与程序的执行异步,因此不能采用文件接口(interface)。为此,发明了 pselect
及其更好的替代方案之一。
与文件相比,更微妙的是线程同步结构(互斥体、信号量等)。人们已经做出了一些尝试,使它们也可以用作文件描述符(请参阅signalfd
和eventfd
),但这些几乎没有流行起来。我认为这在很大程度上是因为它们的性能概况与通常的处理方式截然不同。
关于linux - Linux中什么不是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39383041/