Linuxで単純なデーモンを作成しようとしています。これにより、FIFOが作成され、FIFOに書き込まれたものがすべて収集され、後でそのデータがファイルに書き込まれます。
私の期待は、デーモンがFIFOを作成したら、「echo text>/myfifo」を繰り返し実行できることです。完了したら、「echo quit> / myfifo」を実行すると、プログラムが終了し、すべてのデータがディスクに書き込まれます。
現在、FIFOにさらにデータがあるかどうかを知るためにpoll()を使用しています。これは、最初にデータをFIFOにエコーするまでは正常に機能します。データは正常にエコーされますが、その後、ポーリングは継続的にSIGHUPを返します。
各プロセスがFIFOに書き込んだ後、FIFOをリセット(または閉じて再度開く)する必要がありますか?
私のコードの擬似コードは次のようになります。
ret = fifo(my_fifo, mode);
fd = open(my_fifo, O_RDONLY | O_NONBLOCK);
polling.fd = fd;
polling.events = POLLIN | POLLPRI;
do {
ret = poll(&polling, 1, -1);
amt = read(fd, buf, bufsize);
// do stuff
} while (!done);