I have a linked list with an fd and a string I used to open this file in each entry. I want to open and add files to this list only if this file is not already opened, because I open and parse this files and do not want to do it twice. My idea was to compare the filename with every single name in this list, but my program do it multiple times and one file in Linux can have multiple names (soft/hard links). I think it should not be so complicated, because its easy for the OS to check, whether I already used a inode or not, r?
I already tried to open
the same file with and without flock
, but I always get a new fd
.
When you successfully open a file use fstat
on the file. Check to see if the st_ino
and st_dev
of the struct stat
filed in by fstat
have already been recorded in your linked list. If so then close the file descriptor and move on to the next file. Otherwise add the file descriptor, the file name and st_ino
and st_dev
values to the list.
You can instead use stat
to check before opening the file, but using fstat
after will be slightly faster if the usual case is that file hasn't already been opened.