问候, 在将旧的Solaris 2.4代码移植到CentOS 5.3时,我遇到了像
这样的调用/usr/bin/xterm -S%s%d ...
其中%s是两个字符的数字序列XX,如00,01,%d是数字文件描述符。这显然是一种告诉xterm使用/ dev / ttypXX(一个伪终端从属)的方法,但代码似乎并没有打开相应的master,调用管道(2)而是传递 write fd作为上面的%d替换。在Solaris上,从spawner写入此写入fd会导致输出显示在xterm子级中。在一个strace(1)中,顺便说一句,我看到没有尝试在/ dev下打开任何东西。
答案 0 :(得分:1)
根据solaris manpage,管道系统调用会创建两个双向管道。所以在solaris上你可以使用fds进行读写:
与fildes [0]和fildes 1相关联的文件是流,两者都是 开放阅读和写作。
但是根据linux上的pipe(2)手册页:
pipe()创建一个管道,一个可以使用的单向数据通道 用于进程间通信。
还要注意管道(7)中的以下内容:
在某些系统(但不是Linux)上,管道是双向的:数据可以是 在管端之间沿两个方向传输。根据 POSIX.1-2001,管道只需要是单向的。便携式应用 应该避免依赖双向管道语义。
因此,在Linux上,你不能将写入结束的pipefd 1传递给xterm,因为它期望fd用于双向通信。为了使它工作,你必须使用openpty()并将slave fd传递给xterm。
AFAIK,Solaris上没有openpty;这似乎是你的代码不使用它的原因。