опрос дескриптора файла - PullRequest
       10

опрос дескриптора файла

2 голосов
/ 03 августа 2010

Я создал следующую программу, в которой я хочу опросить дескриптор файла, который я открываю в программе.

#define FILE "help"

int main()
{
        int ret1;
        struct pollfd  fds[1];

        ret1 =  open(FILE, O_CREAT);

        fds[0].fd = ret1;
        fds[0].events = POLLIN;

        while(1)
        {
                poll(fds,1,-1);

                if (fds[0].revents & POLLIN)
                        printf("POLLING");
        }
        return 0;
}

Это происходит в бесконечном цикле. Я ожидаю запустить цикл, когда какая-то операция произойдет с файлом. (Это файл ASCII) Пожалуйста, помогите

Ответы [ 2 ]

4 голосов
/ 03 августа 2010

poll() фактически не работает с открытыми файлами.Поскольку read() для файла никогда не будет блокироваться, poll() всегда будет возвращать, что вы можете прочитать неблокирующую информацию из файла.

Это будет (почти) работать на символьных устройствах *, именованных каналах **или сокеты, так как они блокируются, когда вы read() из них, когда нет доступных данных.(вам также нужно на самом деле прочитать эти данные, иначе опрос снова и снова скажет, что данные доступны)

Чтобы "опросить" растущий / уменьшающийся файл, см. man inotify или выполните свой собственный опрос, используяfstat() в цикле.

* блочные устройства - отдельная история;хотя технически чтение с жесткого диска может блокировать в течение 10 мс или дольше, это не воспринимается как блокировка ввода-вывода в Linux.
** см. также как очистить именованный канал с помощью bash

1 голос
/ 03 августа 2010

Не знаю, является ли это причиной ваших проблем (вероятно, нет), но особенно плохая идея переопределить стандартный макрос FILE. Разве ваш компилятор не жаловался на это?

...