open()和open64()的包装器,并看到vi的系统调用使用open64()

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

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


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

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