【问题标题】:how to call lstat(2) instead of lstat(3)?如何调用 lstat(2) 而不是 lstat(3)?
【发布时间】:2010-08-08 03:31:15
【问题描述】:

如何在 linux/c 中调用 lstat 系统调用,而不是围绕它的 lstat 包装器(lstat(3))?系统调用没有 SYS_lstat(SYS_lstat...

【问题讨论】:

  • 有什么区别? (老实说 - 我的机器没有lstat(3)。)
  • 可能没有区别,但我只能使用系统调用,不能使用库调用。
  • hmmm.. 实际上我的机器也没有.. 好点。问题解决了。
  • @Carl:除非您的机器非常奇特,否则您确实拥有lstat(3),但它只是lstat(2) 的包装。第 2 节中的大多数手册页实际上都在记录 C 库函数,因此实际上应该在第 3 节中。Linux lstat(2) 手册页记录了 lstat(3),但有一段关于“底层内核接口”。

标签: c linux


【解决方案1】:

如果您直接使用系统调用,则需要确保您对struct stat 的定义与内核的定义一致。此外,如果您使用的是 32 位计算机,您可能永远不应该使用已弃用的 lstat 系统调用,而是使用 lstat64 系统调用,因为前者在大文件上会失败。这些以及许多其他问题是为什么自己进行系统调用而不是使用标准库是一个坏主意的原因;后者包含所有遗留的兼容性问题,并为您提供符合标准的 POSIX 接口。

【讨论】:

    【解决方案2】:

    也许您的标头不完整,SYS_lstat 在我的 Ubuntu 10.4 系统上的 /usr/include/bits/syscall.h 中列出。

    #define SYS_lstat __NR_lstat
    

    然后在 asm/unistd_64.h 中:

    #define __NR_lstat                              6
    

    或者也许是 asm/unistd_32.h:

    #define __NR_lstat              107
    

    希望对您有所帮助。

    【讨论】:

    • 我在 CentOS 5 上也有。
    • 它也在我的头文件中,但编译器仍然无法识别它。
    猜你喜欢
    • 1970-01-01
    • 2016-10-28
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    相关资源
    最近更新 更多