У меня есть файловый дескриптор, который открыт для чтения, который может быть неблокирующим. Мне нужно просто прочитать все данные до достижения EOF и записать эти данные в записываемый файловый дескриптор. Поскольку процесс, выполняющий это копирование, не «осознает» все, что происходит вокруг него, я не думаю, что могу сделать что-то полезное во время ожидания данных, и я не хочу использовать цикл while
(while errno
не EAGAIN
), потому что я думаю, что это было бы расточительно. Есть ли способ заблокировать или иным образом приостановить выполнение процесса копирования до тех пор, пока данные не станут доступными?Блокировка силы чтения после EAGAIN?
0
A
ответ
3
Ваш другой ответ просто сбрасывает O_NONBLOCK
, который устанавливает файл обратно к блокированию. Это прекрасно, если это работает в вашей ситуации; но если нет, вы можете использовать select()
для блокировки, пока ваш неблокирующий файловый дескриптор не будет читабельным.
2
Глава 7 Linux SCSI Generic (SG) МЕТОДИЧЕСКИЕ дает an example о том, как это сделать:
int flags = fcntl(fd, F_GETFL);
fcntl(fd, F_SETFL, flags & (~O_NONBLOCK));
Смежные вопросы
- 1. Блокировка чтения базы данных Oracle
- 2. Блокировка вызова для чтения трубки
- 3. Отключить силы после отображения графика силы
- 4. Блокировка MQ замедляет программу чтения
- 5. Блокировка чтения-записи с GCD
- 6. Блокировка чтения файла в php?
- 7. read() возвращает EAGAIN после публикации epoll EPOLLIN для timerfd
- 8. Возврат блокирующего сокета EAGAIN
- 9. Блокировка MySQL для выбора/чтения определенной строки
- 10. Блокировка чтения из stdin в python
- 11. блокировка чтения-записи pthread неопределенное поведение
- 12. EAGAIN on recv()
- 13. Отменить ответ на EAGAIN
- 14. EAGAIN EWOULDBLOCK Android
- 15. pthread_create и EAGAIN
- 16. Что означает EAGAIN?
- 17. Блокировка фрагмента после переключения
- 18. GCM Listener после силы close
- 19. Получение Errno EAGAIN на pthread_mutex_unlock()
- 20. Может ли блокировка предотвращать неповторимые чтения?
- 21. Блокировка чтения из файла в PHP
- 22. Блокировка чтения строк в буфере BufferReader?
- 23. Hibernate Row Блокировка включена для чтения
- 24. Блокировка узла из чтения одновременно из db
- 25. Mysql InnoDB блокировка для атомарного чтения
- 26. Блокировка чтения из входного сокета TCP
- 27. Последовательный порт Linux: блокировка чтения с таймаутом
- 28. Блокировка чтения из FIFO через объект ifstream
- 29. блокировка чтения на уровне строки mariadb