我有一個用gets()讀取輸入的二進制文件。管道系統()?
我想使用我自己的程序中的system()和管道輸入來執行它。這將如何成爲可能?我只想做echo 'blabla' | ./a.out
。現在我想基本上在C程序中執行相同的操作,在該程序中生成blabla,然後執行a.out並將其傳送給它。
我不能改變第一個程序來接受命令行參數。
我有一個用gets()讀取輸入的二進制文件。管道系統()?
我想使用我自己的程序中的system()和管道輸入來執行它。這將如何成爲可能?我只想做echo 'blabla' | ./a.out
。現在我想基本上在C程序中執行相同的操作,在該程序中生成blabla,然後執行a.out並將其傳送給它。
我不能改變第一個程序來接受命令行參數。
我有一個用gets()讀取輸入的二進制文件。
請勿使用它。在任何情況下使用gets()
都是不安全的。
作爲對您的問題的迴應,您可以使用popen()
將輸入輸入到子流程中。
請記住,system
實際上運行一個shell,所以你可以執行任何你想要的shell命令,包括一個管道。除非你生成的輸出需要發送循環或類似的東西,popen
沒有提供任何優勢(特別是,它不允許你寫入程序的stdin
,也可以從它的stdout
中讀取)。所以你可以像這樣使用system
:
// generate the string you want to send
char str[256] = "blabla";
// sprintf it into a command string
char cmd[256];
sprintf(cmd, "echo '%s' | ./a.out", str);
// send the command string to system
system(cmd);
謝謝你,我會在popen()的時候吃點東西。我沒有在那裏使用gets(),它只是一個我正在嘗試編寫緩衝區溢出攻擊的二進制文件。 – Blub
如果你想控制子進程的stdin /和/ stdout,你需要做一些更復雜的事情。創建三個管道,然後分叉。在子進程中,使用'dup2'將管道設置爲stdin,stdout和stderr,然後執行你的程序。父進程可以讀寫管道的另一端。 – user3553031