5

次のコード スニペットを検討してください。

#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フラグがありませんか?

4

1 に答える 1