Linux中的一个设备文件可以指向多个文件吗?

Linux中的一个设备文件可以指向多个文件吗?

Linux 中的 shell(例如:bash)的stdinstdoutstderr文件描述符都指向同一个设备文件,例如,以下是 的stdinstdoutstderr文件描述符bash

在此输入图像描述

Now/dev/tty1不是一个可以读取和写入的“真实”文件,它是一个指向文件或内存中的缓冲区或其他内容的设备文件。

现在我的问题是,是/dev/tty1只指向一个文件,还是指向两个文件?

我的意思是,当从( )bash读取时,以及向(或)写入时,是从 ( ) 读取还是向 ( ) 写入/dev/tty1stdinbash/dev/tty1stdoutstderr相同的文件,还是/dev/tty1指向两个文件,一个在读取时使用/dev/tty1,另一个在写入时使用/dev/tty1

答案1

一个设备节点指向一个设备,在 Linux 中由内核处理。当bashread from时/dev/tty1,它从管理第一终端的设备驱动程序中读取;当它写入时,它写入相同的设备驱动程序。

答案2

设备文件并不“指向多个文件”。设备文件甚至不“指向”单个文件。设备文件指向驱动程序。该驱动程序包含处理读取和写入操作的代码。

从设备读取的数据和写入的数据之间不必存在关系。有些设备有,有些则没有。例如,对于磁盘,在某个位置读取的数据是先前写入到该位置的数据。另一方面,对于串行端口,写入设备的数据通过串行线发送,从设备读取的数据通过串行线接收;发送的内容与接收的内容无关。

终端非常类似于串行设备。事实上,历史上,物理终端通常通过串行线连接。当应用程序从终端文件读取时,它会接收由终端驱动程序或终端仿真器发送的数据 - 终端驱动程序/仿真器将输入写入终端的一侧,应用程序从终端的一侧读取输入。当应用程序写入终端文件时,它会发送数据,然后由终端驱动程序或终端仿真器读取数据 - 应用程序将输出写入终端的一侧,终端驱动程序/仿真器将输出读取到终端的一侧。

相关内容