我遇到了一些关于 LD_PRELOAD 的问题。
当我在HPUX和Solaris中使用LD_PRELOAD时,我发现我无法在/usr/bin/touch中附加我的open64/open/creat64/creat函数,但是我的unlink在/usr/bin/rm中却可以生效,为什么?
我做了一个简单的测试:
int open(int fd, int flag, mode_t mode)
{
return -1;
}
int open64(int fd, int flag, mode_t mode)
{
return -1;
}
int creat(int fd, mode_t mode)
{
return -1;
}
int creat64(int fd, mode_t mode)
{
return -1;
}
当我这样做的时候,我发现:正常情况下,我无法打开文件,但是触摸可以打开!
为什么!我为此疑惑了好久。 谁能帮帮我。thx
最后,抱歉我的英语不好
最佳答案
我认为你的函数签名是错误的。 (int 而不是 char *) 在我的系统上,我看到以下签名:
grep -w creat/usr/include/*
/usr/include/fcntl.h:#define creat64 creat
/usr/include/fcntl.h:extern int creat(const char *, mode_t);
grep -w 打开/usr/include/*
/usr/include/fcntl.h:#define open64 open
/usr/include/fcntl.h:extern int open(const char *, int, ...);
关于c - 有时HPUX和Solaris中的LD_PRELOAD无法生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8635730/