我在Linux上使用libc中的system()時遇到了問題。我的代碼是這樣的:系統()可以在管道命令完成之前返回
system("tar zxvOf some.tar.gz fileToExtract | sed 's/some text to remove//' > output");
std::string line;
int count = 0;
std::ifstream inputFile("output");
while(std::getline(input, line != NULL))
++count;
我反覆運行這個片段偶爾我發現在運行結束即計數== 0 - 無行已經從文件中讀取。我查看文件系統,文件中包含我期望的內容(大於零行)。
我的問題是系統()返回,當整個命令傳入已完成或存在的管道'|'意味着system()可以在管道完成後的命令部分之前返回?
我已明確未使用「&」到背景的任何命令的系統部分()。
爲了進一步闡明我在實踐中做運行該代碼段的倍數倍平行但輸出文件是線程ID和()每個呼叫遞增到系統中的靜態整數命名的唯一的文件名。我相信,每次調用system()時,輸出到並讀取的文件都是唯一的。
你有沒有發現爲什麼計數有時是零,當你認爲它不應該是? – 2011-06-17 17:23:35