符号链接和文件重定向

时间:2010-11-21 10:45:16

标签: c++ fstream

在C ++中,我如何检查我们正在打开的文件是否通过符号链接重定向?这是我的文件启动程序处理程序:

 f=fopen(addr.c_str(), "rb");

提前致谢

2 个答案:

答案 0 :(得分:2)

您想查看lstat并查看st_mode S_IFLNK的{​​{1}}字段。

答案 1 :(得分:2)

如果你使用stat(),它会自动跟随符号链接。如果使用fstat(),则已经遵循符号链接,因为文件将被打开以获取文件描述符。

在这种特殊情况下,lstat()优于stat()和fstat(),因为它不遵循符号链接。调用lstat()后,调用open()。但是,这种方法存在固有的竞争条件问题;另一个进程/线程/任务可能在调用lstat()和open()之间出现,并将文件更改为符号链接。

幸运的是,这种竞争条件有一个解决方案。使用open()打开文件时,您可以使用标志O_NOFOLLOW。如果有符号链接,这将告诉open()不要遵循符号链接。但是,您仍然需要知道您打开的文件是否是符号链接(但未遵循)。为此,请使用从open()返回的文件描述符和fstat()。

希望这有帮助。