コンソールから標準入力を受け取り、フィードバックを画面に出力するサービスとして実行されるプログラムがあります。次の簡単な例のように考えることができますが、printf()
関数は実際にはもっと複雑な関数です。
//keyin.c
int main(int argc, char *argv[])
{
char buf[80];
int i = 1;
while(i++){
printf("enter %d string: \n", i);
scanf("%s", buf);
printf("print %d string: %s \n\n", i, buf);
sleep(2);
}
return 0;
}
ここで、名前付きパイプを入力として使用して、別のプログラムを使用して、コンソールに入力する代わりに、パイプに書き込むことで目的のコマンドをサービスに渡すことができるようにします。
次の方法で名前付きパイプを作成しました。
mknod MYFIFO p
次に、次の方法で入力をリダイレクトします。
root@ubuntu: ./keyin < MYFIFO
次に、次の方法でコマンドをパイプに書き込みます。
root@ubuntu: echo "test" > MYFIFO
サービスが「テスト」を取得して印刷し、次の入力を待つことを期待していますが、最初の実行後、「テスト」を無限に印刷し続け、削除してもパイプファイルに再び応答することはありませんそれ。
私は何を間違えましたか?