【问题标题】:Wrapper for open() and open64() and see that system calls by vi uses open64()open() 和 open64() 的包装器,并看到 vi 的系统调用使用 open64()
【发布时间】:2011-07-11 20:17:48
【问题描述】:

我已经为open()open64( 编写了包装器)。现在我通过使用LD_PRELOAD 环境变量预加载我的包装器库来运行vi,我看到使用open64() 包装器而不是open()。但是当我 strace vi 我看到系统调用是对open() (当然包括其他系统调用)。这里有什么问题?

【问题讨论】:

    标签: c wrapper vi


    【解决方案1】:

    您是否在 64 位系统上运行?如果是这样,那就不足为奇了。 strace 跟踪实际的系统调用,而不是调用库中的哪些函数。在 64 位系统上,openopen64 由相同的系统调用实现。

    【讨论】:

      【解决方案2】:

      strace 实用程序跟踪 system calls(系统调用)并且 open 恰好是系统调用和库函数。 open()open64() 库函数在内部使用 open 系统调用从内核请求服务。据我了解,使用open()O_LARGEFILE 标志相当于使用open64() 来支持32 位应用程序中的大文件。


      如果对open64() 的调用是在内部调用open() 函数,则不会调用您的open() 包装器,因为您无法插入内部库函数调用。它们在运行前被解析。

      【讨论】:

        猜你喜欢
        • 2011-07-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-10
        • 1970-01-01
        • 2015-06-02
        • 2015-01-06
        • 1970-01-01
        相关资源
        最近更新 更多