ИМЯ
close − закрыть файловый дескриптор
ОБЗОР
#include <unistd.h>
int close(int fd);
ОПИСАНИЕ
close закрывает файловый дескриптор, который после этого не ссылается ни на один и файл и может быть использован повторно. Все блокировки, находящиеся на соответствующем файле, снимаются (независимо от того, был ли использован для установки блокировки именно этот файловый дескриптор).
Если fd является последней копией какого-либо файлового дескриптора, то ресурсы, связанные с ним, освобождаются; если дескриптор был последней ссылкой на файл, удаленный с помощью unlink(2), то файл окончательно удаляется.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
close возвращает ноль при успешном завершении или −1, если произошла ошибка.
ОШИБКИ
EBADF |
fd является неверным файловым дескриптором. |
|||
EINTR |
Системный вызов close() был прерван сигналом. |
|||
EIO |
Произошла ошибка ввода/вывода. |
СООТВЕТСТВИЕ СТАНДАРТАМ
SVr4, SVID, POSIX, X/OPEN, BSD 4.3. SVr4 документирует дополнительный код ошибки ENOLINK.
ЗАМЕЧАНИЯ
Не проверять значение, возвращаемое функцией close − обычная, но от этого не менее серьезная ошибка программирования. Вполне возможно, что ошибка в предыдущей операции write(2) впервые даст о себе знать при выполнении close. Отсутствие проверки возвращаемого значение при закрытии файла, может привести к потере данных. Особенно это касается таких аспектов как NFS и дисковые квоты.
Успешное выполнение close() не гарантирует, что данные успешно записаны на диск, потому что ядро откладывает запись. Обычно файловые системы не сбрасывают буфера на диск при закрытии потока. Если вам нужно удостовериться, что данные физически сохранены на диске, используйте fsync(2). (В этом случае всё будет зависить от железа и самого диска.)
СМОТРИ ТАКЖЕ
open(2), fcntl(2), shutdown(2), unlink(2), fclose(3), fsync(2)
ПЕРЕВОД
Copyright (C) Alexey Mahotkin <alexm [AT] hsys.ru> 1999-2000, Виктор Вислобоков <corochoone [AT] perm.ru> 2003