Роббинс Арнольд
Шрифт:
Во всех случаях для каналов и FIFO
Также во всех случаях, как упоминалось, записи размером вплоть до
Как и в случае с
Наиболее все усложняется, когда установлен
размер ≥ nbytes | размер < abytes | |
---|---|---|
nbytes ≤ PIPE_BUF | write успешна | write возвращает (-1)/EAGAIN |
размер > 0 | размер = 0 | |
nbytes > PIPE_BUF | write записывает, что может | write возвращает (-1)/EAGAIN |
Для файлов, не являющихся каналами и FIFO и к которым может быть применен
размер > 0
размер = 0
Хотя есть ряд сбивающих с толку изменений поведения в зависимости от того, канал это или не канал, установлен
• Всегда можно отличить конец файла:
• Если нет доступных для чтения данных,
• Если для записи нет места,
• Когда место есть, будет записано столько данных, сколько возможно, так что в конечном счете все данные будут переписаны.
Подводя итог, если вы собираетесь использовать неблокирующий ввод/вывод, любой код, который использует
Более того, вы должны быть готовы обработать
Неблокирующий ввод/вывод действительно усложняет вашу жизнь, в этом нет никакого сомнения. Но для многих приложений он является необходимостью, позволяющей выполнить задание. Снова рассмотрите спулер печати. Демон спулера не может позволить себе находиться в блокирующем
9.4.3.5. Сводка fcntl
Сводка для системного вызова
Таблица 9.5. Сводка
Значение cmd | Значение arg | Возвращает |
---|---|---|
F_DUPFD | Наименьший новый дескриптор | Дублирует аргумент fd |
F_GETFD | Получает флаги дескриптора файла (close-on-exec) | |
F_SETFD | Новое значение флага | Устанавливает флаги дескриптора файла (close-on-exec) |
F_GETFL | Получает флаги основного файла | |
F_SETFL | Новое значение флага | Устанавливает флаги основного файла |
Флаги создания, статуса и прав доступа файла копируются, когда дескриптор файла дублируется. Флаг close-on-exec не копируется.