当使用stdlib.h中的system()从程序中运行程序时,如何模拟输入以提供子程序的scanf调用?

时间:2014-02-17 00:19:27

标签: c++ c

我正在编写一个程序来反复运行一个不同的程序,每次给它一个问题的不同输入,检查输出。 system("the_program")完成此操作,但如何在运行scanf()时提供该程序输入?

2 个答案:

答案 0 :(得分:1)

最简单的方法是编写一个文件,并使用重定向(system("the_program < the_file"))将其传递给子文件。

但是,这要好得多,你可以在你的程序和孩子之间建立一个管道。子项需要将其标准输入(文件描述符0)连接到管道的读取侧。 system是同步的,因此除了pipedup2之外,您还需要forkexecve系统调用。幸运的是,这个过程有一个包装器:popen("the_program", "w")。它返回一个可以写入的FILE *。使用pclose关闭文件*,并确保阅读手册,因为它与fclose不同!

答案 1 :(得分:-1)

如果您正在编写两个父程序和子程序,则无需解决因模拟其他内容而产生的问题,而我们只能通过在论点中:

system('./the_program the_scanf_input')

当然是__程序:

var = argv[1] //this was var = scanf('%', &var)