Если 2 дескрипторов файлов копировались в тот же файл (т.е. 506
и STDOUT
), будет вызов close(506)
очистка объект, связанный обоими и рендерингом STDOUT
неприменимый? Или ядро реализует подсчет ссылок для своих файлов?
Ядро реализует подсчет ссылок, поэтому объект ядра не закрывается до тех пор, пока не будут закрыты все указатели файлов, указывающие на него.
Счетчики ссылок широко используются внутри ядра, чтобы избежать состояний гонки из-за одновременного выделения и высвобождение ресурса. Счетчик ссылок - это просто счетчик atomic_t, связанный с определенным ресурсом, таким как страница памяти, модуль или файл. Счетчик атомарно увеличивается, когда путь управления ядром начинает использовать ресурс, и уменьшается, когда путь управления ядром завершает использование ресурса. Когда счетчик ссылок становится нулевым, ресурс не используется, и при необходимости его можно освободить.
Возможно, вы захотите увидеть это, если захотите просмотреть это для обзора реализации подсчета ссылок ядра Linux.