在 C++ 中,我将如何检查我们正在打开的文件是否正在通过符号链接重定向?这是我的文件打开器处理程序:
f=fopen(addr.c_str(), "rb");
提前致谢
您想查看lstat
并检查for的st_mode
字段。struct stat
S_IFLNK
如果您使用 stat(),它将自动跟随符号链接。如果您使用 fstat(),则符号链接将已被跟踪,因为文件将已打开以获取文件描述符。
在这种特殊情况下, lstat() 比 stat() 和 fstat() 更可取,因为它不遵循符号链接。调用 lstat() 后,再调用 open()。但是,这种方法存在固有的竞争条件问题;在调用 lstat() 和 open() 之间可能会出现另一个进程/线程/任务,并将文件更改为符号链接。
幸运的是,有一个解决这种竞争条件的方法。使用 open() 打开文件时,您可以使用标志 O_NOFOLLOW。如果有符号链接,这将告诉 open() 不要遵循符号链接。但是,您仍然需要知道您打开的文件是否是符号链接(但未遵循)。为此,请将 open() 返回的文件描述符与 fstat() 一起使用。
希望这可以帮助。