假设我在konsole中打开了两个标签(Tab1和Tab2)。
当我在他们两个中运行tty时,我有:
TAB1:
~$ tty
/dev/pts/23
TAB2:
~$ 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是否有一个参数给程序,所以它知道哪个psudoterminal发送"你好"?或者程序将字符串发送回bash(如何?)谁知道哪个伪终端发送数据?
感谢您的帮助
答案 0 :(得分:1)
如果查看进程打开文件,可以看到STDOUT,STDERR等指向您在问题中使用tty
已经找到的特定伪终端
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
已经处理过了。