我已經給出了一些編譯好的程序。我想通過程序stdin和stdout與我的bash腳本進行交流。我需要雙向溝通。程序不能在交換信息之間被殺死。我該怎麼做? 簡單示例:與進程雙向通信
讓該程序被編譯爲部分求和(C++),腳本結果將爲該和的平方。計劃:
int main() {
int num, sum = 0;
while(true) {
std::cin >> num;
sum += num;
std::cout << sum << std::endl;
}
}
我的腳本應該看起來像這樣:
for i in 1 2 3 4; do
echo "$i" > program
read program to line;
echo $((line * line))
done
如果在程序中,我有for(int i = 1; i <= 4; ++i)
,那麼我可以做這樣的事情:
exec 4< <(./program); # Just read from program
for i in 1 2 3 4; do
read <&4 line;
echo "sh: $((line * line))";
done
更多的外觀here。從另一方面,如果在程序我有std::cout << sum * sum;
,那麼解決方案可能是:
exec &3> >(./program); # Write to program
for i in 1 2 3 4; do
echo "$i" > &3
done
我的問題是與其他進程/程序雙向通信。我不必使用exec。我無法安裝第三方軟件。只有Bash的解決方案,沒有文件,會很好。
如果我運行其他進程,將很高興知道pid在腳本結束時將其殺死。
我想到與未來兩個或三個過程的溝通。冷杉程序的輸出可能依賴於第二程序的輸出並且也在第二方面。像過程的溝通者一樣。
但是,我無法重新編譯程序並改變某些內容。我在程序中只有stdin和stdout通信。
我想你的C++程序應該支持POSIX管道。檢查這個答案http://stackoverflow.com/a/2789967/524743 – Samuel
重定向(使用'>'或'<')不起作用。你想要的是絕對*管道*。 –
@Samuel謝謝你的回答。如果我可以編輯Cpp程序,那麼我知道如何在兩個進程之間進行通信。但是重新編譯程序並改變它是不可能的。我在程序中只有stdin和stdout通信。 – Tacet