Linux программирование в примерах
Шрифт:
В действительности человек, ожидающий опустения или заполнения сушилки, не должен просто неподвижно стоять. [101] Вместо этого незанятый супруг мог бы пойти и найти другую работу по кухне (такую, как подметание всех крошек за детьми на полу), пока сушилка снова не будет готова.
На языке Unix/POSIX эта концепция обозначается термином неблокирующий ввод/вывод, т.е. запрошенный ввод/вывод либо завершается, либо возвращает значение ошибки, указывающее на отсутствие данных (для читающего) или отсутствие места (для записывающего). Неблокирующий ввод/вывод применяется к каналам и FIFO, а не к обычным файлам на диске. Он может применяться также и к определенным устройствам, таким как терминалы, и к сетевым соединениям, обе эти темы выходят за рамки данной книги.
101
Ну, мы игнорируем мысль, что два супруга могли бы хотеть поговорить друг с другом и насладиться компанией — Примеч. автора.
С функцией
Открытие FIFO с установленным или сброшенным
Блокируется до открытия FIFO для записи.
Открывает файл, возвращаясь немедленно.
Блокирует до открытия FIFO для чтения.
Если FIFO был открыт для чтения, открывает FIFO и немедленно возвращается. В противном случае возвращает ошибку (возвращаемое значение -1 и
Как описано для обычных каналов, вызов
Функция
Функция
В заключение, поведение
Во всех случаях для каналов и FIFO
Также во всех случаях, как упоминалось, записи размером вплоть до
Как и в случае с
Наиболее все усложняется, когда установлен
| размер ≥ nbytes | размер < abytes | |
|---|---|---|
nbytes ≤ PIPE_BUF | write успешна | write возвращает (-1)/EAGAIN |
| размер > 0 | размер = 0 | |
nbytes > PIPE_BUF | write записывает, что может | write возвращает (-1)/EAGAIN |
Для файлов, не являющихся каналами и FIFO и к которым может быть применен
размер > 0
размер = 0
Хотя есть ряд сбивающих с толку изменений поведения в зависимости от того, канал это или не канал, установлен
• Всегда можно отличить конец файла:
• Если нет доступных для чтения данных,
• Если для записи нет места,
• Когда место есть, будет записано столько данных, сколько возможно, так что в конечном счете все данные будут переписаны.
Подводя итог, если вы собираетесь использовать неблокирующий ввод/вывод, любой код, который использует
Более того, вы должны быть готовы обработать
Неблокирующий ввод/вывод действительно усложняет вашу жизнь, в этом нет никакого сомнения. Но для многих приложений он является необходимостью, позволяющей выполнить задание. Снова рассмотрите спулер печати. Демон спулера не может позволить себе находиться в блокирующем
Возлюби болезнь свою
Научно-образовательная:
психология
рейтинг книги
Тринадцатый XI
11. Видящий смерть
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Хроники Тириса. Книга 1
1. Хроники Тириса
Фантастика:
боевая фантастика
космическая фантастика
фантастика: прочее
рейтинг книги
Дважды одаренный. Том IV
4. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
рейтинг книги
Я уже барон
2. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Эволюционер из трущоб. Том 9
9. Эволюционер из трущоб
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
рейтинг книги
Паладин из прошлого тысячелетия
1. Соприкосновение миров
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Свет горизонта
1. Свет горизонта
Фантастика:
фэнтези
рейтинг книги