次のコード スニペットを検討してください。
#include <fcntl.h>
#include <stdio.h>
#include <sys/poll.h>
#include <unistd.h>
int main(int argc, char ** argv) {
int fd;
char buf[1024];
int i;
struct pollfd pfds;
fd = open(argv[1], O_RDONLY);
while (1) {
pfds.fd = fd;
pfds.events = POLLIN;
poll(&pfds, 1, -1);
if (pfds.revents & POLLIN) {
i = read(fd, buf, 1024);
write(1, buf, i);
}
}
return 0;
}
このプログラムは、ファイル名を受け取り、対応するファイルを開き、そのファイル記述子を「ポーリング」して、データの可用性を監視します。可用性でデータが検出されるたびpoll
に、それらの新しいデータが印刷されます。
しかし、このプログラムはどうなるでしょうか。プログラムの起動時に、監視したいファイルに既にデータが含まれている場合は、その内容が出力されます。それで大丈夫です。しかし、後でテキスト エディタでファイルを編集して保存すると、プログラムは新しいデータを出力しません。
では、新しいデータの可用性について、通常のファイル記述子 (パスを使用するファイルではない) を監視するにはどうすればよいでしょうか? 以外の別の関数を使用する必要がありpoll
ますか? または、pollfd
フラグがありませんか?