如何将来自printf的消息路由到终端



假设我在konsole中打开了两个选项卡(Tab1和Tab2)。

当我在它们中运行tty时,我有:

表1:

~$ tty
/dev/pts/23

表2:

~$ tty
/dev/pts/24

如果我在Tab1中运行一个带有printf("hello")的简单程序hello.c,那么系统如何从写入stdout(文件id 1)到写入/dev/pts/23,由konsole读取,然后出现在Tab1?

系统如何知道它必须将"Hello"字符串提供给/dev/pts/23而不是/dev/pts/24?它是怎么做到的?

bash是否为程序提供了一个参数,以便它知道发送"Hello"的psudoterminal?或者程序将字符串发送回bash(如何?)谁知道将数据发送到哪个伪终端?

感谢您的帮助

如果您查看进程打开的文件,您可以看到STDOUT、STDERR等指向您在问题中使用tty已经找到的特定psuedo终端

root@hello:~# ls -l /proc/self/fd
total 0
lrwx------ 1 root root 64 May 21 02:18 0 -> /dev/pts/3
lrwx------ 1 root root 64 May 21 02:18 1 -> /dev/pts/3
lrwx------ 1 root root 64 May 21 02:18 2 -> /dev/pts/3

正如您所知,进程是由fork系统调用创建的,该系统调用实际上复制了父级的打开文件描述符。因此,基本上,您的进程从其父进程获取文件描述符。

这位家长是怎么把这些和他联系在一起的?konsole已经处理过了。

最新更新