[英]When running a program from within a program using system() in stdlib.h, how do I simulate typing to feed the sub-program's scanf call?
我正在编写一个程序来反复运行一个不同的程序,每次给一个问题一个不同的输入,并检查输出。 system("the_program")
完成了此操作,但是在运行scanf()
时如何给该程序输入?
最简单的方法是编写一个文件,然后使用重定向将其传递给子system("the_program < the_file")
( system("the_program < the_file")
)。
但是,这要好得多,您可以在程序和孩子之间建立一条管道。 子级需要将其标准输入(文件描述符0)连接到管道的读取侧。 system
是同步的,因此除了pipe
和dup2
外,您还需要fork
和execve
系统调用。 幸运的是,此过程有一个包装器: popen("the_program", "w")
。 它返回一个您可以写入的FILE *。 使用pclose
关闭FILE *,并确保阅读手册,因为它与fclose不同!
在你写两个父母和孩子的方案的情况下 ,没有必要为解决由别的东西模拟的时候我们就可以通过在参数产生的问题:
system('./the_program the_scanf_input')
当然,the_program:
var = argv[1] //this was var = scanf('%', &var)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.