考虑这个简单的程序:
#include <unistd.h>
int main () {
write(STDIN_FILENO, "hello\n", 6);
return 0;
}
并且即使我将
STDIN_FILENO
替换为STDERR_FILENO
xor STDOUT_FILENO
,也会在终端上查看输出。
我知道
bash
持有 fd 255
, (zsh
, 10
), 用于在一个文件描述符关闭时保持对终端的访问的特殊目的。这似乎意味着相关流的底层表示没有真正的区别。
我的问题如下:
lseek()
偏移量?程序如何,例如:$ cat
hello
hello
在没有他们互相覆盖的情况下工作?
在我的Linux VM上(使用
zsh
),可以看到:
$ ls -l /proc/$$/fd
total 0
lrwx------ ... ... ... 0 -> /dev/tty1
lrwx------ ... ... ... 1 -> /dev/tty1
lrwx------ ... ... ... 10 -> /dev/tty1
lrwx------ ... ... ... 2 -> /dev/tty1
看来他们确实共享同一台设备,我希望对此有更多了解。