gpt4 book ai didi

linux - 确定一个 pty 是否有程序要求它输入

转载 作者:IT王子 更新时间:2023-10-29 00:42:10 25 4
gpt4 key购买 nike

我正在使用 C 中的 openpty 创建一个 pty,并在主/父和从/子之间共享它。 child 可以 fork/exec 并将文件描述符传递给其他程序。我想向 child 注入(inject)命令,但如果我立即传递它们,它们就会丢失。我如何从父进程中得知有人阻止了标准输入的输入?我碰巧在 SUSE 10 上工作,但我更喜欢独立于发行版的解决方案。

编辑:这个问题的答案对我来说仍然很有趣,但可能与问题无关。我稍后再讲。

代码的简化版本是使用 script源代码(一些标题可能需要修复),并添加行

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

到 parent 的标准输入。如果我改为执行 bash shell,则不会转储任何内容,并且程序会很好地注入(inject)命令。

我仍然对所问问题的答案感到好奇,但它显然不再与我的问题相关,因为还有其他事情正在发生。如果有人确实知道如何查看 pty 是否正在阅读,请随时回答。

最佳答案

据我所知,文件描述符不会在转移到另一个进程 后继续存在。不过,您可以在线程之间共享它们。

至于知道什么时候有东西要读,我会尝试在读取集中使用 select 和适当的文件描述符。

关于linux - 确定一个 pty 是否有程序要求它输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11729177/

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