1

(mkfifo() を使用して) FIFO を作成しましたが、何らかのプロセスがそれにデータを数回書き込むまで待つ必要があります。私は次のコードを書きました: (悪いスタイルは無視してください。例を簡潔にするためです)

int count = 0, read = 0;
while(count < 2) {
    read = read(fd, buf, BUFFER_SIZE);
    if(read > 0) {
        //do work...
        count++;
    }
}

忙しい待機を避けるために、次の行を追加しました。

int count = 0, read = 0;
while(count < 2) {
    sleep(2);
    read = read(fd, buf, BUFFER_SIZE);
    if(read > 0) {
        //do work...
        count++;
    }
}

(fd は FIFO の記述子です)
しかし、私はそれが本当に好きではありません。人工的に見えます。それを行うより良い方法はありますか?

4

1 に答える 1

0

通常、O_NONBLOCK フラグを指定して fifo を開いていない場合は、データが読み取り可能になるまでブロックを読み取ります。だから「sleep(2);」記載は不要です。また、「if(read > 0)」チェックは、FIFO の書き込み終了が閉じられた場合や、信号 (errno = EINTR) によって中断されたために読み取り呼び出しが返された場合などの状況のた​​めに、依然として必要です。

于 2016-05-01T06:40:00.553 に答える