将字符插入到父进程的缓冲区中

我正在尝试编写一个在后台运行的程序,该程序可以“键入”到父进程中,例如发出shell命令,就像我自己在键盘上键入它们一样。我试着用ѭ0doing推回
STDIN
#include <stdio.h>

int main (int argc, char** argv) {
        ungetc(\'x\', stdin);
        return 0;
}
我希望这样做:
$ gcc -o unget unget.c
$ ./unget&
本来会在
$
提示符下以
x
离开我,就像我刚刚键入它一样,但是我什么也没得到。我进入背景是否“丢”了1英镑?谢谢!     
已邀请:
第二个答案不是您所写问题的答案,而是您要解决的问题。它比将击键发送到您的外壳要强大得多。 在外壳程序中,使用
trap
命令设置信号处理程序。例如:
trap \"echo hello\" USR2
用您想使用的任何信号代替ѭ9。然后运行一个子进程,该进程定期将信号发送到其父进程。     
您尝试做的事情根本行不通。
ungetc
操作stdio
FILE
缓冲区,而不是底层打开文件描述,因此无法与其他进程共享。 您可以尝试在ѭ12中运行交互式会话,并使用screen的
exec
命令通过将注入数据的进程重定向文件描述符。或者,您也可以使用伪tty设备自己实现类似的事情。 此外,从您的评论来看,我认为您要尝试做的是一个非常糟糕的主意。如果您很不幸,并且输入出现在您以交互方式键入内容的中间,则可能会造成灾难性的后果。例如,对自动化命令进行成像是
command_foo my_important_file
现在假设您正在打字
rm -rf useless_crap
am!
my_important_file
刚被删除。     
否-
ungetc
仅将字符“推”回程序自己的缓冲区,因此当同一程序读取的下一个字符将传递给
ungetc
。将某些内容传回父级需要完全不同的内容(例如,创建一些管道)。     
就在我头顶上方,也许您可​​以调整终端的管道,以便孩子的脚为父母服务。在bash中,它将如下所示:
exec 6>&1
exec 7<&0
exec 1>&7
exec 0<&6
然后,当您启动程序时,管道应反转。因此,放入cout的所有内容都应从您的父母那里cin发行(在本例中为bash流程)。     

要回复问题请先登录注册