『壹』 請教C++程序如何捕獲linux shell的輸出
調用系統函數popen,利用管道實現輸出的傳送即可。
popen()
函數通過創建一個管道,調用
fork
產生一個子進程,執行一個
shell
以運行命令來開啟一個進程。這個進程必須由
pclose()
函數關閉,而不是
fclose()
函數。pclose()
函數關閉標准
I/O
流,等待命令執行結束,然後返回
shell
的終止狀態。如果
shell
不能被執行,則
pclose()
返回的終止狀態與
shell
已執行
exit
一樣。
type參數只能是讀或者寫中的一種,得到的返回值(標准
I/O
流)也具有和
type
相應的只讀或只寫類型。如果
type
是
"r"
則文件指針連接到
command
的標准輸出;如果
type
是
"w"
則文件指針連接到
command
的標准輸入。
command參數是一個指向以
NULL
結束的
shell
命令字元串的指針。這行命令將被傳到
bin/sh
並使用-c
標志,shell
將執行這個命令。
popen的返回值是個標准
I/O
流,必須由pclose來終止。前面提到這個流是單向的。所以向這個流寫內容相當於寫入該命令的標准輸入;命令的標准輸出和調用popen的進程相同。與之相反的,從流中讀數據相當於讀取命令的標准輸出;命令的標准輸入和調用popen的進程相同。
常式如下:
#include<cstdio>
#include<unistd.h>
#include<cstring>
#include<cstdlib>
intmain()
{
FILE*read_fp;
charbuffer[BUFSIZ+1];
intchars_read;
memset(buffer,'