gpt4 book ai didi

linux - xterm 的 -S 选项(传递伪终端名称和描述符)在 Linux 中如何工作?

转载 作者:太空狗 更新时间:2023-10-29 12:38:43 27 4
gpt4 key购买 nike

您好,在将旧的 Solaris 2.4 代码移植到 CentOS 5.3 时,我遇到了这样的调用

/usr/bin/xterm -S%s%d ...

其中 %s 是一个双字符数字序列 XX,例如 00、01,而 %d 是一个数字文件描述符。这显然是一种告诉 xterm 使用/dev/ttypXX(一个伪终端从机)的方法,但代码似乎并不关心打开相应的主机,而是调用 pipe(2) 并传递 write fd 作为上面的 %d 替换。在 Solaris 上,从 spawner 写入此 write fd 会导致输出出现在 xterm 子项中。顺便说一句,在 strace(1) 中,我没有看到有人试图打开/dev 下的任何东西。

最佳答案

根据solaris manpage ,管道系统调用创建两个双向管道。所以在 solaris 上你可以同时使用 fds 来读写:

The files associated with fildes[0] and fildes1 are streams and are both opened for reading and writing.

但是根据 pipe(2) 在 linux 上的联机帮助页:

pipe() creates a pipe, a unidirectional data channel that can be used for interprocess communication.

另请注意 pipe(7) 中的以下内容:

On some systems (but not Linux), pipes are bidirectional: data can be transmitted in both directions between the pipe ends. According to POSIX.1-2001, pipes only need to be unidirectional. Portable applications should avoid reliance on bidirectional pipe semantics.


所以,在 linux 上你不能通过 pipefd 1 ,写入端,到 xterm,因为它需要一个用于双向通信的 fd。要使其工作,您必须使用 openpty() 并将从属 fd 传递给 xterm。

据我所知,openpty 在 Solaris 上不可用;这似乎是您的代码不使用它的原因。

关于linux - xterm 的 -S 选项(传递伪终端名称和描述符)在 Linux 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1166493/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com