簡體   English   中英

在stdlib.h中使用system()從程序內部運行程序時,如何模擬輸入以提供子程序的scanf調用?

[英]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是同步的,因此除了pipedup2外,您還需要forkexecve系統調用。 幸運的是,此過程有一個包裝器: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM