これはバックグラウンドで実行され、コマンドを待つループプログラムです。
#include <iostream>
using namespace std;
char buffer[256];
int main(int argc, char *argv[])
{
while(true){
fgets(buffer, 255, stdin);
buffer[255] = 0;
if(buffer[0] != '\0'){
cout << buffer;
buffer[0] = '\0';
}
}
return 0;
}
私はそれを実行します:
myLoop &
パイプを介してこのプロセスにコマンドを送信するにはどうすればよいですか?
ベストアンサー1
私はこれが「実際の」パイプラインでは不可能だと思います。
man mkfifo
代わりに、FIFO(名前付きパイプ、参考資料を参照)、または(よりエレガントだがより複雑な)Unixソケット(AF_UNIX)を使用できます。
./background-proc </path/to/fifo &
cat >/path/to/fifo
# typing commands into cat
私は開発者ではないので、ソケットとの唯一の関係はですsocat
。しかし、始めるのに役立つかもしれません。
プログラムと通信するには「サーバー」が必要です。これらのパイプラインはバックグラウンドで始まります。
socat UNIX-LISTEN:/tmp/sockettest,fork STDOUT | sed 's/./&_/g'
これはsed
単なるテスト用です。
その後、1つ以上の開始
socat STDIN UNIX-CONNECT:/tmp/sockettest
バックグラウンドプログラム用のコマンドを生成するプログラムがある場合は、ここでもパイプを使用できます。
cmd_prog | socat STDIN UNIX-CONNECT:/tmp/sockettest
fork
FIFOに比べて利点は、(サーバー側のオプションを使用して)クライアントの接続を切断して再接続できることです。 FIFOでは、受信側を引き続き実行するにはいくつかのトリックが必要です。
while true; do cat /path/to/fifo; done | background_prog