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
Хотя есть ряд сбивающих с толку изменений поведения в зависимости от того, канал это или не канал, установлен
• Всегда можно отличить конец файла:
• Если нет доступных для чтения данных,
• Если для записи нет места,
• Когда место есть, будет записано столько данных, сколько возможно, так что в конечном счете все данные будут переписаны.
Подводя итог, если вы собираетесь использовать неблокирующий ввод/вывод, любой код, который использует
Более того, вы должны быть готовы обработать
Неблокирующий ввод/вывод действительно усложняет вашу жизнь, в этом нет никакого сомнения. Но для многих приложений он является необходимостью, позволяющей выполнить задание. Снова рассмотрите спулер печати. Демон спулера не может позволить себе находиться в блокирующем
Мастер 11
11. Мастер
Фантастика:
боевая фантастика
попаданцы
технофэнтези
аниме
фэнтези
рейтинг книги
Ваше Сиятельство
1. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
рейтинг книги
Газлайтер. Том 29
29. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
рейтинг книги
Газлайтер. Том 15
15. История Телепата
Фантастика:
боевая фантастика
попаданцы
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга третья
3. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 35
35. История Телепата
Фантастика:
аниме
боевая фантастика
фэнтези
рейтинг книги
На границе империй. Том 9. Часть 2
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
рейтинг книги
Наследник старого рода
1. Живой лёд
Фантастика:
фэнтези
рейтинг книги
Младший сын
1. Государи московские
Научно-образовательная:
история
рейтинг книги
Кодекс Охотника. Книга II
2. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
боевая фантастика
юмористическое фэнтези
рейтинг книги
Инженер Петра Великого 6
6. Инженер Петра Великого
Фантастика:
альтернативная история
фэнтези
попаданцы
рейтинг книги
Кодекс Охотника. Книга XVIII
18. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Собрание сочинений (Том 1)
Детские:
прочая детская литература
рейтинг книги