我遇到了一些关于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;
}
当我这样做时,我发现:通常,我无法打开文件,但触摸可以做到!
为什么!我很长时间都对此感到困惑。 谁可以帮助我。谢谢。
最后,抱歉我的英语不好
答案 0 :(得分:1)
我认为你的功能签名是错误的。 (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 open /usr/include/*
/usr/include/fcntl.h:#define open64 open
/usr/include/fcntl.h:extern int open(const char *, int, ...);