close
закрывает файловый дескриптор, который после этого не ссылается ни на
один и файл и может быть использован повторно. Все блокировки,
находящиеся на соответствующем файле, снимаются (независимо от того,
был ли использован для установки блокировки именно этот файловый
дескриптор).
Если
fd
является последней копией какого-либо файлового дескриптора, то
ресурсы, связанные с ним, освобождаются; если дескриптор был
последней ссылкой на файл, удаленный с помощью
unlink(2),
то файл окончательно удаляется.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
close
возвращает ноль при успешном завершении или -1, если произошла
ошибка.
Не проверять значение, возвращаемое функцией
close
- обычная, но от этого не менее серьезная ошибка программирования.
Вполне возможно, что ошибка в предыдущей операции
write(2)
впервые даст о себе знать при выполнении
close.
Отсутствие проверки возвращаемого значение при закрытии файла, может
привести к потере данных. Особенно это касается таких аспектов как NFS
и дисковые квоты.
Успешное выполнение
close()
не гарантирует, что данные успешно записаны на диск, потому что ядро
откладывает запись. Обычно файловые системы не сбрасывают буфера на
диск при закрытии потока. Если вам нужно удостовериться, что данные
физически сохранены на диске, используйте
fsync(2).
(В этом случае всё будет зависить от железа и самого диска.)