【问题标题】:following symbolic links in C遵循 C 中的符号链接
【发布时间】:2009-10-14 22:40:34
【问题描述】:

我正在寻找一个 C 程序,给定符号链接的名称,它将打印链接指向的文件或目录的名称。关于如何开始的任何建议?

【问题讨论】:

  • 你在什么平台上做这个?在 Windows 上它涉及 Win32 代码,在 linux 上显然有所不同。
  • 我能闻到微弱的作业气味吗? (-:

标签: c symlink


【解决方案1】:

已经提到的readlink() 函数是答案的一部分。但是,你应该知道它可怕的接口(它不会终止响应字符串!)。

您可能还想查看realpath() 函数,SO 1563186 中讨论了该函数的使用。您还可以在 IIUG 软件档案中查看“linkpath”的代码。它分析在解析符号链接时遇到的所有目录的安全性 - 它使用 readlink()lstat()stat();测试程序时的一项检查是确保 realpath() 将名称解析为同一个文件。

【讨论】:

    【解决方案2】:

    确保您的环境支持 POSIX 函数,包括 unistd.h,然后使用 readlink 函数。

    【讨论】:

      【解决方案3】:

      根据平台的不同,stat()fstat() 可能是首先要尝试的东西。如果您使用的是 Linux 或 cygwin,那么stat 程序将让您对系统 API 调用的期望有一个合理的了解(它几乎为您提供了它的文本转储)。

      【讨论】:

      • statfstatlstat 将为您提供文件链接的详细信息,例如修改时间,但不会告诉您链接指向的内容。
      【解决方案4】:

      你想要的系统调用是 readlink()。获取链接的路径,返回存储在链接中的字符串(始终是文件系统中的有效路径!)。查看手册页(“man 2 readlink”)了解详细信息。

      请注意,您的问题有些模棱两可。您可能会问如何分辨文件系统中的“真实”路径,这有点复杂。

      【讨论】:

      • 和调用“realpath()”一样复杂?
      • 嗯,是的。我的意思是链接扩展算法比单个系统调用更复杂。正如其他人所假设的那样,这看起来像是一项家庭作业。我不认为图书馆调用可能是可接受的分配解决方案。 :)
      猜你喜欢
      • 1970-01-01
      • 2015-11-06
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多