Можно предположить, что следующие функции из стандартной библиотеки: open, read, write, seek
и close
образуют интерфейс для операционной системы. В этом интерфейсе он поддерживает некоторые структуры данных. Эти структуры данных не представляют интереса для пользователя стандартной библиотеки.
Указанные функции не работают в файловой системе. Следовательно, никакие vnode или inode не модифицируются этими функциями. Они будут работать / изменяться частью файловой системы операционной системы, если такая модификация требуется операциями. Например, запись может потребовать выделения новых блоков на диске, которые должны быть зарегистрированы в inode.
Функция unlink
стандартной библиотеки указывает операционной системе удалить файл. Если ОС может удалить файл (то есть он не защищен, не открыт другим процессом и т. Д.), Он удалит файл из файловой системы, тем самым изменив inode. (Файловые системы с отложенным удалением перемещают файл в корзину).
Итак: не правильно, что close(fd)
также уничтожает запись в таблице файлов, связанную с fd
, если под «записью таблицы файлов» вы подразумеваете запись в файловой системе, за исключением, возможно, короткой живые, временные файлы (однако, в зависимости от программного обеспечения файловой системы ОС, они, возможно, никогда не имели записи),
и: нет, close(fd)
не не уничтожает «запись таблицы vnode, связанную с записью таблицы vnode» (что в любом случае является странным предложением), если с vnode вы имеете в виду некоторый тип inode.
EDIT:
С учетом материалов вашего курса:
Правильно ли, что close (fd) также должен уничтожить запись таблицы файлов, связанную с fd? Да, даже если есть другой файловый дескриптор, ссылающийся на ту же запись таблицы файлов?
Нет, это не правильно. close
уничтожит запись в таблице дескрипторов файла процесса. Таблица файлов ядра должна поддерживать счетчик ссылок (не показанный в ваших материалах курса), и когда он достигает нуля, запись KFT может быть удалена. Таким образом, close
вызывает уменьшение только счетчика ссылок в KFT.
close(fd)
также уничтожает запись таблицы vnode, связанную с записью таблицы vnode, или не обязательно? Да, даже если есть другая запись в таблице файлов, ссылающаяся на ту же запись таблицы vnode?
Я считаю этот вопрос неуместным или не понимаю его. Нет записи в таблице vnode. В KFT есть только идентификатор vnode. Управление vnodes (т.е. выделение и освобождение хранилища) выходит за рамки вашего курса.