linux 中是否有流 i/o 的真实文件?
Is there a real file for stream i/o in linux?
我对 linux
中的 i/o stream
的概念感到困惑。
有 3 种类型的流:标准输入。标准输出和标准错误。
stdin
、stdout
和stderr
的内存或硬盘中是否有真实文件?
例如:内核将所有键盘输入写入 stdin
文件?然后 bash(例如)读取这个文件?
如果这是真的,那就意味着任何软件都可以随时读取这个文件?
我不会称这些为 真实文件,但是:
您可以在 Linux 上使用 /dev/stdout
等。
每个进程(至少在最初)都有为其打开的标准 stdin/stdout/stderr 文件句柄。每个进程在 /proc 中也有一个表示,这是一个由内核创建的虚拟文件系统,用于访问有关进程的各种内容。所以...
marc@panic:~$ ps
PID TTY TIME CMD
4367 pts/0 00:00:00 bash <--- my bash process
4394 pts/0 00:00:00 ps
marc@panic:~$ cd /proc/4367/fd <---my bash processes's /proc file descriptors
marc@panic:/proc/4367/fd$ ls -l
total 0
lrwx------ 1 marc marc 64 Nov 17 11:17 0 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:17 1 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:17 2 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:18 255 -> /dev/pts/0
文件 0
、1
、2
对应于 stdin、stdout、stderr,它们只是指向我的登录会话正在使用的特定伪终端的符号链接。
我对 linux
中的 i/o stream
的概念感到困惑。
有 3 种类型的流:标准输入。标准输出和标准错误。
stdin
、stdout
和stderr
的内存或硬盘中是否有真实文件?
例如:内核将所有键盘输入写入 stdin
文件?然后 bash(例如)读取这个文件?
如果这是真的,那就意味着任何软件都可以随时读取这个文件?
我不会称这些为 真实文件,但是:
您可以在 Linux 上使用 /dev/stdout
等。
每个进程(至少在最初)都有为其打开的标准 stdin/stdout/stderr 文件句柄。每个进程在 /proc 中也有一个表示,这是一个由内核创建的虚拟文件系统,用于访问有关进程的各种内容。所以...
marc@panic:~$ ps
PID TTY TIME CMD
4367 pts/0 00:00:00 bash <--- my bash process
4394 pts/0 00:00:00 ps
marc@panic:~$ cd /proc/4367/fd <---my bash processes's /proc file descriptors
marc@panic:/proc/4367/fd$ ls -l
total 0
lrwx------ 1 marc marc 64 Nov 17 11:17 0 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:17 1 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:17 2 -> /dev/pts/0
lrwx------ 1 marc marc 64 Nov 17 11:18 255 -> /dev/pts/0
文件 0
、1
、2
对应于 stdin、stdout、stderr,它们只是指向我的登录会话正在使用的特定伪终端的符号链接。