来自 printf 的消息如何路由到终端?
How messages from printf are routed to the terminal?
假设我在 konsole 中打开了两个选项卡(Tab1 和 Tab2)。
当我 运行 tty 在他们两个我有:
选项卡 1:
~$ tty
/dev/pts/23
选项卡 2:
~$ tty
/dev/pts/24
如果我 运行 一个简单的程序 hello.c 在 Tab1 中带有 printf("Hello"),系统如何从写入标准输出(文件 ID 1)到写入/dev/pts/23,被控制台读取然后出现在Tab1?
系统如何知道必须将 "Hello" 字符串提供给 /dev/pts/23 而不是 /dev/pts/24?它是如何做到的?
是否有 bash 给程序的参数,以便它知道向哪个伪终端发送 "Hello"?或者程序将字符串发送回 bash(如何?)谁知道将数据发送到哪个伪终端?
感谢您的帮助
如果您查看您的进程打开文件,您可以看到 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
已经解决了。
假设我在 konsole 中打开了两个选项卡(Tab1 和 Tab2)。
当我 运行 tty 在他们两个我有:
选项卡 1:
~$ tty
/dev/pts/23
选项卡 2:
~$ tty
/dev/pts/24
如果我 运行 一个简单的程序 hello.c 在 Tab1 中带有 printf("Hello"),系统如何从写入标准输出(文件 ID 1)到写入/dev/pts/23,被控制台读取然后出现在Tab1?
系统如何知道必须将 "Hello" 字符串提供给 /dev/pts/23 而不是 /dev/pts/24?它是如何做到的?
是否有 bash 给程序的参数,以便它知道向哪个伪终端发送 "Hello"?或者程序将字符串发送回 bash(如何?)谁知道将数据发送到哪个伪终端?
感谢您的帮助
如果您查看您的进程打开文件,您可以看到 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
已经解决了。