9.1.1.3. Разделение дескрипторов файлов и close()

9.1.1.3. Разделение дескрипторов файлов и close()

Тот факт, что несколько дескрипторов файлов могут указывать на один и тот же открытый файл, имеет важное следствие: файл не закрывается до тех пор, пока не будут закрыты все дескрипторы файла.

Позже в главе мы увидим, что несколько дескрипторов для одного файла могут существовать не только для разных процессов, но даже и внутри одного и того же процесса; это правило особенно важно для работы с каналами (pipes).

Если вам нужно узнать, открыты ли два дескриптора для одного и того же файла, можете использовать fstat() (см. раздел 5.4.2 «Получение сведений о файле») для двух дескрипторов с двумя различными структурами struct stat. Если соответствующие поля st_dev и st_ino равны, это один и тот же файл.

Позже в главе мы завершим обсуждение манипуляций с дескрипторами файлов и таблицей дескрипторов файлов.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

15.8. Передача дескрипторов

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

15.8. Передача дескрипторов Когда мы говорим о передаче открытого дескриптора от одного процесса другому, обычно подразумевается одно из двух:? наследование всех открытых дескрипторов родительского процесса дочерним после вызова fork;? сохранение открытых дескрипторов при


Счетчики дескрипторов процессов

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Счетчики дескрипторов процессов Распространенной ошибкой программистов является пренебрежение закрытием дескрипторов после того, как необходимость в них отпала; это может стать причиной утечки ресурсов, что, в свою очередь, может приводить к снижению


Дублирование дескрипторов

Из книги MySQL: руководство профессионала автора Паутов Алексей В

Дублирование дескрипторов Родительскому и дочернему процессам может требоваться различный доступ к объекту, идентифицируемому дескриптором, который наследует дочерний процесс. Кроме того, процессу вместо псевдодескриптора, получаемого с помощью функции GetModuleFileName или


Чтение и изменение дескрипторов безопасности

Из книги Сетевые средства Linux автора Смит Родерик В.

Чтение и изменение дескрипторов безопасности После того как дескриптор безопасности связан с файлом, следующим шагом является определение кода защиты существующего файла и его возможное изменение. Для получения и установления кода защиты файла в терминах дескрипторов


5.2.9.4. Инструкция CLOSE

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

5.2.9.4. Инструкция CLOSE CLOSE cursor_nameЭта инструкция закрывает предварительно открытый курсор. Если курсор не закрыт явно, он все равно закроется в конце составной инструкции, в которой он был


Разделение файлов с помощью NFS

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Разделение файлов с помощью NFS Для того чтобы обеспечить совместное использование файлов, надо сообщить серверу NFS о том, какие каталоги должны экспортироваться и какие клиенты имеют право доступа к конкретным каталогам. Кроме того, необходимо указать опции, управляющие


11.5.3. Дублирование файловых дескрипторов

Из книги Linux программирование в примерах автора Роббинс Арнольд

11.5.3. Дублирование файловых дескрипторов Иногда процессам требуется создать новый файловый дескриптор, который ссылается на ранее открытый файл. Командные оболочки используют эту функциональность для перенаправления стандартного ввода, вывода и потока ошибок по


22.3.7. Закрытие файловых дескрипторов

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

22.3.7. Закрытие файловых дескрипторов В системах Linux и Unix файловые дескрипторы, как правило, наследуются через системные вызовы exec() (и всегда наследуются через fork() и vfork()). В большинстве случаев такое поведение нежелательно, поскольку только разделяться должны только stdin,


9.6.2.2. Переопределение дескрипторов (handle)

Из книги UNIX: разработка сетевых приложений автора Стивенс Уильям Ричард

9.6.2.2. Переопределение дескрипторов (handle) Когда программа начинает выполняться, пять дескрипторов (handle), соответствующих стандартным вводу, выводу, выводу сообщений об ошибках, порту и устройству печати, уже назначены. Пользователь может использовать значения этих


9.1.1.2. Разделение дескрипторов файлов

Из книги автора

9.1.1.2. Разделение дескрипторов файлов Атрибуты, которые порожденный процесс наследует от родителя, устанавливаются в те же значения, которые были в родительском процессе в момент выполнения fork(). Однако, с этого момента два процесса продолжают идти собственными путями


9.4.3.1. Флаг close-on-exec

Из книги автора

9.4.3.1. Флаг close-on-exec После вызова fork() и перед вызовом exec() следует убедиться, что новая программа наследует лишь те открытые файлы, которые ей нужны. Вы не захотите, чтобы порожденный процесс мешался в открытых файлах родителя, если только это так не задумано. С другой стороны,


Функция close(2)

Из книги автора

Функция close(2) Функция close(2) разрывает связь между файловым дескриптором и открытым файлом, созданную функциями creat(2), open(2), dup(2), pipe(2) или fcntl(2). Функция имеет вид:#include <unistd.h>int close(int fildes);В случае успеха close(2) возвращает нулевое значение, в противном случае возвращается -1, а


4.9. Функция close

Из книги автора

4.9. Функция close Обычная функция Unix close также используется для закрытия сокета и завершения соединения TCP.#include <unistd.h>int close(int sockfd);По умолчанию функция close помечает сокет TCP как закрытый и немедленно возвращает управление процессу. Дескриптор сокета больше не используется


15.7. Передача дескрипторов

Из книги автора

15.7. Передача дескрипторов Когда нам требуется передать дескриптор от одного процесса другому, обычно мы выбираем одно из двух решений:1. Дочерний процесс использует все открытые дескрипторы совместно с родительским процессом после вызова функции fork.2. Все дескрипторы