我正在使用 C 中的 openpty 创建一个 pty,并在主/父和从/子之间共享它。孩子可以 fork/exec 并将文件描述符传递给其他程序。我想向孩子注入命令,但如果我立即传递它们,它们就会迷路。我如何从父进程中得知有人阻止了来自标准输入的输入?我碰巧在 SUSE 10 上工作,但我更喜欢发行版独立的解决方案。
编辑:这个问题的答案对我来说仍然很有趣,但可能与问题无关。我稍后再谈。
代码的简化版本是使用脚本源代码(可能需要修复一些标题),并添加行
char* command = "echo 'Hello World!'\r\n", written = 0;
(void)write(master, command, strlen(command));
(void)write(STDOUT_FILENO, "Sent command\r\n", 14);
在大之前
for (;;) {
主要。
我一直在从脚本执行 csh,但后来我注意到脚本命令正在转储一些垃圾(如在 vi 中所见)
^[[>0;115;0c
到父母的标准输入。如果我改为执行 bash shell,则不会丢弃任何内容,并且程序会很好地注入命令。
我仍然对所问问题的答案感到好奇,但显然它不再与我的问题相关,因为还有其他事情发生。如果有人确实知道如何查看是否正在阅读 pty,请随时回答。