【问题标题】:How to get the file desciptor of a symbolic link?如何获取符号链接的文件描述符?
【发布时间】:2018-09-14 10:01:48
【问题描述】:

我知道我可以使用readlink 读取符号链接,并使用llistxattr 等对其进行操作,但我正在寻找它的文件描述符,以便我可以将它与flistxattr 等一起使用.

我还检查了open 的手册,我知道O_NO_FOLLOW 不会打开符号链接(但会失败,以便某些应用程序更安全)。

那么有什么方法可以获取符号链接的文件描述符吗?

【问题讨论】:

  • 有一个名为llistxattr(2) 的系统调用列出了符号链接的扩展属性。也许您根本不需要文件描述符,但可以使用它来完成您的原始任务。
  • @Alfe 是的,但我知道llistxattr(我的问题的第一段),我在问如何使用 fd 来做到这一点。

标签: linux symlink file-descriptor


【解决方案1】:

有没有办法获取符号链接的文件描述符?

来自symlink(7) 手册页:

获取引用符号链接的文件描述符

使用 O_PATH 和 O_NOFOLLOW 标志的组合打开 (2) 产生一个文件描述符,可以作为 dirfd 参数传递 系统调用,例如 fstatat(2)、fchownat(2)、fchmodat(2)、linkat(2)、 和 readlinkat(2),以便对符号链接本身进行操作 (而不是它所引用的文件)。

默认情况下(即,如果未指定 AT_SYMLINK_FOLLOW 标志),如果 name_to_handle_at(2) 应用于符号链接,它产生一个句柄 对于符号链接(而不是它所引用的文件)。一 然后可以获得符号链接的文件描述符(而不是 它引用的文件)通过在 a 中指定 O_PATH 标志 随后调用 open_by_handle_at(2)。同样,该文件描述符 可以在前面提到的系统调用中对 符号链接本身。

【讨论】:

  • 但是我想对fd进行操作,而不是将其用作父目录。我可以在上面使用fchmodfchown 等吗?
猜你喜欢
  • 2015-05-05
  • 2017-06-15
  • 2013-06-03
  • 1970-01-01
  • 2022-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-02
相关资源
最近更新 更多