Linux中用C++通過管道來擷取命令列輸出的內容
轉載請說明出處:http://blog.csdn.net/cywosp/article/details/8980898
使用C++時,有些時候我們可以通過管道的方法來擷取所執行的命令所輸出的內容。具體做法如下:
首先你需要確定你所執行的命令所輸出的內容的格式(不同的作業系統相同的命令所輸出來的內容格式可能會不一致)。我們來舉例說明:我想擷取/var目錄當前所暫用的儲存空間,以KB為單位輸出:
[root@localhost /]# du -sk /var
13532132var
[root@localhost /]# du -sk /var | awk -F ' ' '{print $1}'
13532132
從上面輸出可以知道/var目錄當前暫用了13532132KB,那麼我們如何將改值使用到我們的程式中呢?為了簡單起見我實現了如下函數:
int64_t CalculateDirUsedCapacity (const std::string& directoryName){ FILE *fstream = NULL; char buff[32]; memset (buff ,'\0', sizeof(buff)); std::string cmd = "du -sk " + directoryName; cmd += "| awk -F ' ' '{print $1}'"; // 通過管道來回去系統命令返回的值 if(NULL == (fstream = popen (cmd.c_str (), "r"))) { return 0; } if(NULL == fgets (buff, sizeof(buff), fstream)) { pclose(fstream); return 0; } std::strstream ss; ss << buff; int64_t usedCapacity = 0; ss >> usedCapacity; pclose(fstream); // close pipe return usedCapacity;}