【发布时间】:2009-10-14 22:40:34
【问题描述】:
我正在寻找一个 C 程序,给定符号链接的名称,它将打印链接指向的文件或目录的名称。关于如何开始的任何建议?
【问题讨论】:
-
你在什么平台上做这个?在 Windows 上它涉及 Win32 代码,在 linux 上显然有所不同。
-
我能闻到微弱的作业气味吗? (-:
我正在寻找一个 C 程序,给定符号链接的名称,它将打印链接指向的文件或目录的名称。关于如何开始的任何建议?
【问题讨论】:
已经提到的readlink() 函数是答案的一部分。但是,你应该知道它可怕的接口(它不会终止响应字符串!)。
您可能还想查看realpath() 函数,SO 1563186 中讨论了该函数的使用。您还可以在 IIUG 软件档案中查看“linkpath”的代码。它分析在解析符号链接时遇到的所有目录的安全性 - 它使用 readlink() 和 lstat() 和 stat();测试程序时的一项检查是确保 realpath() 将名称解析为同一个文件。
【讨论】:
确保您的环境支持 POSIX 函数,包括 unistd.h,然后使用 readlink 函数。
【讨论】:
根据平台的不同,stat() 或 fstat() 可能是首先要尝试的东西。如果您使用的是 Linux 或 cygwin,那么stat 程序将让您对系统 API 调用的期望有一个合理的了解(它几乎为您提供了它的文本转储)。
【讨论】:
stat、fstat 和 lstat 将为您提供文件链接的详细信息,例如修改时间,但不会告诉您链接指向的内容。
你想要的系统调用是 readlink()。获取链接的路径,返回存储在链接中的字符串(不始终是文件系统中的有效路径!)。查看手册页(“man 2 readlink”)了解详细信息。
请注意,您的问题有些模棱两可。您可能会问如何分辨文件系统中的“真实”路径,这有点复杂。
【讨论】: