Как писать с использованием функции опроса в Linux?

#c #linux #file-io #operating-system #system-calls

#c #linux #file-io #операционная система #системные вызовы

Вопрос:

Я новичок в Linux и изучаю системные вызовы Linux с помощью программы C. Я придумал функцию с именем poll() в разделе мультиплексированного ввода-вывода. Я не могу понять, как записывать данные в определенный файл, и когда я попытался записать входные данные в файл, он успешно записывается, но «ТАЙМ-АУТ» не происходит, а возвращаемое значение poll() равно «1». Пожалуйста, помогите, какой соответствующий флаг должен использоваться в open() при открытии файла. Заранее спасибо. Поскольку я новичок в этой теме, пожалуйста, объясните, что я неправильно понял в этой концепции. Код, который я пробовал, прилагается ниже.

 #include<unistd.h>
#include<fcntl.h>
#include<stdio.h>
#include<poll.h>

int main() {


        int fd;
        int timeout = 5000;
        struct pollfd fds[2];

        int fd1 = 0;
        char buff[11];

        while(1) {

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

                fd = open("/home/user/samplefiles/File.txt", O_WRONLY);
                fds[1].fd = fd;
                fds[1].events = POLLOUT;

                int ret = poll(fds, 2, timeout); //returns 1 

                printf("        Ret = %dn", ret);
                if (ret == 0) {
                        printf("        Timeoutn");
                        continue;
                }

                read(fd1, buff, 10);
                write(fd, buff, 10);
                printf("written buff = %sn", buff);
        }
}


 

Комментарии:

1. Что это за файл /home/user/samplefiles/File.txt ? Обычный файл? FIFO?

2. @JosephSible-Переустановите MONICA Да, это обычный файл

3. Что вы ожидаете poll услышать от обычного файла?

4. Также iirc обычный файл всегда будет немедленно опрашиваться как доступный для записи.

5. Вам также нужно обратить внимание на read() возвращаемое значение и использовать его, чтобы узнать, сколько write() . Плюс проверка и обработка ошибок везде.