Назва

close - закриває дескриптор файлу

Огляд

#include <unistd.h>

int close(int fd);

Опис

close закриває дескриптор файлу, тож він більне не посилається на жодний файл і може бути використаним знову. Будь-які замки, наставлені на файл видаляються (незалежно від дескриптору, що використовувався для отримання замка).

Якщо fd являється останньою копією певного дескриптору файлу, ресурси пов'язані з ним звільняються; якщо ж дескриптор був останнім посилянням на файл, якого було видалено за допомогою unlink (2), файл видаляється.

Повернені значення

Опис

close закриває дескриптор файлу, тож він більне не посилається на жодний файл і може бути використаним знову. Будь-які замки, наставлені на файл видаляються (незалежно від дескриптору, що використовувався для отримання замка).

Якщо fd являється останньою копією певного дескриптору файлу, ресурси пов'язані з ним звільняються; якщо ж дескриптор був останнім посилянням на файл, якого було видалено за допомогою unlink (2), файл видаляється.

Повернені значення

close повертає 0 при успішному виконанні і -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)