При openat()
первый аргумент, fd
, должен быть дескриптором файла для каталога, например, того, который вы получили при открытии "."
, или специального значения AT_FDCWD
(что означает открытые относительные пути относительно текущего каталога).Обратите внимание, что опция O_PATH
, которую вы используете, является расширением только для Linux openat()
.
Итак, поскольку вы используете допустимый файловый дескриптор для каталога, вызовopenat()
должно быть успешным.Теперь у вас есть два файловых дескриптора, каждый из которых указывает (независимо - с отдельными описаниями открытых файлов) на текущий каталог.Как правило, один и тот же файл можно открывать несколько раз в одном процессе (или в нескольких процессах - обеспечение доступа к одному процессу на Unix-подобных (POSIX) системах действительно очень сложно).
Тамс этими дескрипторами вы не можете ничего сделать, кроме как использовать их в *at()
системных вызовах.Любой из файловых дескрипторов был бы достаточен;открытие обоих было излишним.