ВУЗ:
Составители:
3
ENXIO Флаги O_NONBLOCK и O_WRONLY установлены, файл FILENAME
является FIFO-файлом и ни один процесс не открыл файл на чтение;
EROFS Файл размещается на файловой системе, предназначенной только для
чтения, один из флагов O_WRONLY, O_RDWR или O_TRUNC,
O_CREAT установлены и файл не существует.
Если на 32-битном компьютере исходные коды программы компилировались с
установленным флагом _FILE_OFFSET_BITS == 64, функция возвращает дескриптор
файла, открытого в режиме “большого” файла, который позволяет использовать файлы
размером до 2
63
байтов. Использование таких файлов незаметно для пользователя, так
как вызовы функций заменяются на соответствующие, работающие с “большими”
файлами.
Функция не является повторно входимой, поэтому для ее использования
необходимо использовать специальные механизмы, не рассматриваемые в данном
курсе.
int open64 (const char *FILENAME, int FLAGS[, mode_t MODE])
Функция идентична open за исключением того, что на 32-битных системах
открывает файл в режиме “большого” файла. Если исходные тексты программы
компилируются с флагом _FILE_OFFSET_BITS == 64, то эта функция вызывается при
вызове open.
int creat (const char *FILENAME, mode_t MODE)
Вызов этой функции идентичен вызову
open (FILENAME, O_WRONLY | O_CREAT | O_TRUNC, MODE)
При установленном флаге _FILE_OFFSET_BITS == 64 функция работает с
“большими” файлами. Функция является устаревшей.
int creat64 (const char *FILENAME, mode_t MODE)
Функция идентична creat, однако работает с “большими” файлами. Функция
является устаревшей.
int close (int FILEDES)
Функция закрывает файл, указанный дескриптором FILEDES. Закрытие файла
имеет следующие последствия:
• Освобождается память, ассоциированная с дескриптором;
• Все захваченные записи разблокируются;
• Когда дескриптор файла ассоциирован с каналом или FIFO-файлом, все
непрочитанные записи теряются.
В случае нормального завершения, функция возвращает значение 0, в противном
случае возвращается –1. Переменная errno может принимать следующие значения:
EBADF FILEDES не является правильным дескриптором файла;
EINTR Функция была прервана поступлением сигнала
ENOSPC
EIO
EDQUOT
При использовании сетевой файловой системы (NFS) эти ошибки,
возникающие при выполнении write не могут быть распознаны до
вызова close.
Изменение размера файла
В некоторых случаях необходимо явно определить размер файла. Прототипы
функций для выполнения этой операции расположены в заголовочном файле <unistd.h>.
int truncate (const char *NAME, off_t LENGTH)
Функция обрезает файл до размера, равного LENGTH байтов. Если размер
файла был больше LENGTH, его размер становится равным LENGTH. Если размер был
меньше или равен LENGTH, не выполняется никаких действий. Файл должен быть
открыт на запись для выполнения этой операции.
ENXIO Флаги O_NONBLOCK и O_WRONLY установлены, файл FILENAME является FIFO-файлом и ни один процесс не открыл файл на чтение; EROFS Файл размещается на файловой системе, предназначенной только для чтения, один из флагов O_WRONLY, O_RDWR или O_TRUNC, O_CREAT установлены и файл не существует. Если на 32-битном компьютере исходные коды программы компилировались с установленным флагом _FILE_OFFSET_BITS == 64, функция возвращает дескриптор файла, открытого в режиме “большого” файла, который позволяет использовать файлы размером до 263 байтов. Использование таких файлов незаметно для пользователя, так как вызовы функций заменяются на соответствующие, работающие с “большими” файлами. Функция не является повторно входимой, поэтому для ее использования необходимо использовать специальные механизмы, не рассматриваемые в данном курсе. int open64 (const char *FILENAME, int FLAGS[, mode_t MODE]) Функция идентична open за исключением того, что на 32-битных системах открывает файл в режиме “большого” файла. Если исходные тексты программы компилируются с флагом _FILE_OFFSET_BITS == 64, то эта функция вызывается при вызове open. int creat (const char *FILENAME, mode_t MODE) Вызов этой функции идентичен вызову open (FILENAME, O_WRONLY | O_CREAT | O_TRUNC, MODE) При установленном флаге _FILE_OFFSET_BITS == 64 функция работает с “большими” файлами. Функция является устаревшей. int creat64 (const char *FILENAME, mode_t MODE) Функция идентична creat, однако работает с “большими” файлами. Функция является устаревшей. int close (int FILEDES) Функция закрывает файл, указанный дескриптором FILEDES. Закрытие файла имеет следующие последствия: • Освобождается память, ассоциированная с дескриптором; • Все захваченные записи разблокируются; • Когда дескриптор файла ассоциирован с каналом или FIFO-файлом, все непрочитанные записи теряются. В случае нормального завершения, функция возвращает значение 0, в противном случае возвращается –1. Переменная errno может принимать следующие значения: EBADF FILEDES не является правильным дескриптором файла; EINTR Функция была прервана поступлением сигнала ENOSPC При использовании сетевой файловой системы (NFS) эти ошибки, EIO возникающие при выполнении write не могут быть распознаны до EDQUOT вызова close. Изменение размера файла В некоторых случаях необходимо явно определить размер файла. Прототипы функций для выполнения этой операции расположены в заголовочном файле. int truncate (const char *NAME, off_t LENGTH) Функция обрезает файл до размера, равного LENGTH байтов. Если размер файла был больше LENGTH, его размер становится равным LENGTH. Если размер был меньше или равен LENGTH, не выполняется никаких действий. Файл должен быть открыт на запись для выполнения этой операции. 3