我意识到这可能是一个奇怪的问题,但如果说我有一个可以向系统发送命令的程序,如:
system(command);
程序可以通过“ls -l”等参数运行并向其他程序发送命令。
但是,如果我有一个需要交互式输入的程序,例如使用scanf,是否有一种直接的方法来使我的C程序能够有效地与它进行交互。
难以解释我的请求。这是一项技术问题的练习,原因我无法简明扼要解释。
答案 0 :(得分:2)
是否有一种直接的方法来启用我的C程序 有效地与之互动。
是的,您可能正在寻找popen(3)
。它允许您运行命令,并为其FILE *
/ stdin
添加stdout
。
可悲的是,在Linux上它是单向的:stdin 或 stdout,而不是两者同时。至少有一个其他实现(FreeBSD)允许双向管道。
答案 1 :(得分:1)
通常您会使用以下模式:
pipe()
打开一对文件描述符,这些描述符将用作子进程的stdin。 (或linux下的pipe2()
)pipe()
打开一对文件描述符,用作子进程的标准输出。fork()
。您现在有两个进程,父进程和新进程。fork() == 0
)
dup2()
从上面步骤1和2中创建的文件描述符创建新的STDIN_FILENO和STDOUT_FILENO。exec()
函数启动新程序。fork() > 0
)
waitpid()
您还可以通过创建第3个管道并dup2()
将其添加到STDERR_FILENO
man pipe
有一段代码,展示了如何使用管道。此模式还有其他examples