毕竟,符号链接是一个文件。我希望将符号链接作为普通文件逐字节打开,而不解析到它指向的位置。举个例子,git这样做;有关更多详细信息,请参阅此答案/sf/answers/66820281/
我怎样才能用 C 或 Python 来做到这一点?
如果我使用fopenor open,那么符号链接会自动解析。我怎样才能改变这种行为?
毕竟,符号链接是一个文件。
从某种意义上说,是的。 符号链接通常有自己的 inode,或者看起来好像有,因此从这个意义上来说它是一个文件。目录也是如此。当然,在 UNIX 中,一切都是文件。
但符号链接不是常规文件。与常规文件内容交互的系统接口遍历符号链接以获取它们引用的文件或目录(如果有)的内容。
我希望将符号链接作为普通文件逐字节打开,而不解析到它指向的位置。
一般来说,你不能。不是来自用户空间。操作系统内核当然会从存储中读取文件系统结构,包括表示符号链接的索引节点数据,但原始数据不会通过提供对常规文件内容的访问的系统接口暴露给用户空间程序。
但是,您可以使用专用接口来检索包含符号链接指向的路径的字符串。POSIX 为此指定的 C 库函数是readlink(). 您还可以realpath()使用它,它将通过可能的多层符号链接执行完整路径解析到最终文件。但这些都与访问符号链接的数据不同,就好像符号链接是常规文件一样。
Python 具有以下两个版本:os.readlink()和os.path.realpath().