Роббинс Арнольд
Шрифт:
Во всех остальных отношениях дескрипторы файлов, возвращаемые
4.6.3. Возвращаясь к open
Вы можете вспомнить объявление для
Ранее мы сказали, что при открытии файла для простого ввода/вывода мы можем игнорировать аргумент
Помимо флагов
Таблица 4.7. Дополнительные флаги POSIX для
Флаг | Значение |
---|---|
O_APPEND | Принудительно осуществляет все записи в конец файла |
O_CREAT | Создает новый файл, если он не существует. |
O_EXCL | При использовании вместе с O_CREAT возвращает ошибку, если файл уже существует |
O_TRUNC | Урезает файл (устанавливает его длину в 0), если он существует. |
Если даны
Обратите внимание, что флаг
Также легко видеть, что, по крайней мере концептуально,
ЗАМЕЧАНИЕ. Если файл открыт с флагом
Современные системы предоставляют дополнительные флаги с более специализированным назначением. Они кратко описаны в табл. 4.8.
Таблица 4.8. Дополнительные расширенные флаги POSIX для
Флаг | Значение |
---|---|
O_APPEND | Принудительно осуществляет все записи в конец файла |
O_CREAT | Создает новый файл, если он не существует. |
O_EXCL | При использовании вместе с O_CREAT возвращает ошибку, если файл уже существует |
O_TRUNC | Урезает файл (устанавливает его длину в 0), если он существует. |
Флаги
Буферный кэш значительно повышает производительность: поскольку дисковый ввод/ вывод часто на порядок и медленнее операций центрального процессора и памяти, программы значительно снизили бы производительность, если бы им пришлось ждать завершения каждой записи на диск. Вдобавок, если данные были недавно записаны на диск, при последующем чтении тех же данных они уже находились бы в буферном кэше, откуда их можно вернуть немедленно, не дожидаясь завершения операции чтения с диска.
Системы Unix осуществляют также опережающее чтение; поскольку чтение в большинстве случаев последовательное, операционная система после прочтения одного блока осуществляет чтение нескольких дополнительных последовательных блоков таким образом, что эта информация будет уже находиться в кэше, когда программа ее запросит. Если один и тот же файл читают несколько программ, они все получают преимущество, поскольку все получают свои данные из одной копии дисковых блоков файла в буферном кэше.