有时,HPUX和Solaris中的LD_PRELOAD无法生效

时间:2011-12-26 12:21:58

标签: c solaris hp-ux ld-preload

我遇到了一些关于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;
}

当我这样做时,我发现:通常,我无法打开文件,但触摸可以做到!

为什么!我很长时间都对此感到困惑。 谁可以帮助我。谢谢。

最后,抱歉我的英语不好

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, ...);