0

名前付きパイプ (FIFO) を介して bash スクリプトからメッセージを受信できる C ファイルがあります。echo "abc" > /tmp/fifoパイプの書き込み側を開閉します。したがって、私は C から繰り返しファイルを開きます。open のブロック性はfopen、何かがパイプに書き込まれた場合にのみ戻ることを意味します。コードは次のようになります。

while (1) {
    if (stat(fifo_path, &fifo_st) != 0) {
        perror("FIFO does not exist, exiting\n");
        exit(0)
    }

    fifo = fopen(fifo_path, "r");
    read = fgets(buf, 1024 * sizeof(char), fifo);

私の問題は、bash スクリプトがファイルを削除して、通信が完了したことを示す可能性があることです。その場合、クリーンアップを行う必要があります。ただし、fopenファイルが削除されたときに返されないため (これは予想される動作だと思います)、FIFO ファイルが削除されたことを伝える方法がありません。

ファイルが削除されたことを検出してクリーンアップを行う別のスレッドを作成できると思いますが、それはオーバーエンジニアリングのようです。それを行うためのより良い方法があるかどうか知りたいですか?

編集:問題についてはここで説明していますが、「プロセスが永久にハングすることを意味します」で終わり、推奨される回避策はありません...

4

1 に答える 1