1. 前言
Unix界有一句名言:“一行shell腳本勝過萬行C程序”,雖然這句話有些夸張,但不可否認的是,借助腳本確實能夠極大的簡化一些編程工作。比如實現一個ping程序來測試網絡的連通性,實現ping函數需要寫上200~300行代碼,為什么不能直接調用系統的ping命令呢?通常在程序中通過 system函數來調用shell命令。但是,system函數僅返回命令是否執行成功,而我們可能需要獲得shell命令在控制臺上輸出的結果。例如,執行外部命令ping后,如果執行失敗,我們希望得到ping的返回信息。
2. 使用臨時文件
首先想到的方法就是將命令輸出重定向到一個臨時文件,在我們的應用程序中讀取這個臨時文件,獲得外部命令執行結果,代碼如下所示:
3. 使用匿名管道
在<<UNIX環境高級編程>>一書中給出了一種通過匿名管道方式將程序結果輸出到分頁程序的例子,因此想到,我們也可以通過管道來將外部命令的結果同應用程序連接起來。方法就是fork一個子進程,并創建一個匿名管道,在子進程中執行shell命令,并將其標準輸出dup 到匿名管道的輸入端,父進程從管道中讀取,即可獲得shell命令的輸出,代碼如下:
總計 128
-rwxr-xr-x 1 root root 5558 09-30 11:51 a.out
-rwxr-xr-x 1 root root 542 09-30 00:00 child_fork.c
-rwxr-xr-x 1 root root 480 09-30 00:13 execve.c
-rwxr-xr-x 1 root root 1811 09-29 21:33 fork.c
-rwxr-xr-x 1 root root 162 09-29 18:54 getpid.c
-rwxr-xr-x 1 root root 1105 09-30 11:49 popen.c
-rwxr-xr-x 1 root root 443 09-30 00:55 system.c
-rwxr-xr-x 1 root root 0 09-30 11:51 test_popen.txt
-rwxr-xr-x 1 root root 4094 09-30 11:39 test.txt
新聞熱點
疑難解答
圖片精選