流设备的概念

问题描述 投票:0回答:0

在我的操作系统课上,教授提到有流和存储设备。我的意思是询问流设备。我也听说过术语character devices.

在Linux VM上,可以通过

proc
文件系统看到对应的终端设备:

$ ls -l /proc/$$/fd
total 0
lrwx------ ... ... ... 0 -> /dev/tty1
lrwx------ ... ... ... 1 -> /dev/tty1
lrwx------ ... ... ... 10 -> /dev/tty1
lrwx------ ... ... ... 2 -> /dev/tty1

看来stdin、stdout、stderr都指向同一个设备,

zsh
维护fd
10
访问终端

我特别想知道终端是如何工作的,以及 shell 之类的程序如何与之交互,因为看起来像

cat
这样的程序在读取标准输入时只在
<Enter>
上接收输入。我发现奇怪的是,你也可以像标准输出一样写入标准输入,所以我想知道如何维护偏移量(为了它们之间的协调——因为它们似乎共享打开文件表中的一个条目),因为这些设备确实没有有效的lseek.

举个例子:

#include <unistd.h>

int main () {
  write(STDIN_FILENO, "hello\n", 6);
  return 0;
}

我的问题真的是:如果不是“存储”,是什么在管理您输入计算机并在屏幕上看到的数据?我问的是“流”设备的概念,以上是示例。

我还特别询问原始文件描述符和底层流设备,而不是

FILE*
提供的缓冲“流”。

一个例子是 UNIX

|
,我理解为具有写入偏移量和读取偏移量,它们以循环(有界)的方式更新;然而,这不是像 stdin 或 stdout 这样的标准流设备。

c linux shell stream operating-system
© www.soinside.com 2019 - 2024. All rights reserved.