我有一个带有fd和字符串的链表我用来在每个条目中打开这个文件.我想打开并仅在此文件尚未打开的情况下将文件添加到此列表中,因为我打开并解析此文件并且不想两次执行此操作.我的想法是将文件名与此列表中的每个名称进行比较,但我的程序多次执行,Linux中的一个文件可以有多个名称(软/硬链接).我认为它不应该那么复杂,因为操作系统很容易检查,我是否已经使用了inode,r?我已经尝试过open
使用和不使用相同的文件flock
,但我总是得到一个新的fd
.
当您成功打开文件时使用fstat
文件.检查,看是否st_ino
和st_dev
的struct stat
通过申请在fstat
已记录在您的链接列表.如果是,则关闭文件描述符并继续下一个文件.否则,将文件描述符,文件名st_ino
和st_dev
值添加到列表中.
您可以stat
在打开文件之前使用它进行检查,但fstat
如果通常情况下该文件尚未打开,则使用after会稍快一些.