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

标签 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;
}

当我这样做的时候,我发现:正常情况下,我无法打开文件,但是触摸可以打开!

为什么!我为此疑惑了好久。 谁能帮帮我。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/

相关文章:

c - LFS 5.7.Glibc-2.29 的完整性检查失败

c++ - 如何从 dbx 获得尽可能多的信息

linux - 切换用户并输出变量内容

multithreading - 为什么应用程序会在一个Solaris框中创建31个 “GC task thread”而在另一个Solaris框中仅创建2个

unix - HPUX 上的 .sl 和 .so 有什么区别?

c - 尝试构建一个接收 char 数组的函数并查看它是否是有效状态

c - 传递给函数时如何访问二维结构数组中的所有成员?

c++ - 什么会导致 HP-UX 和 LINUX for C++ 应用程序的返回值不同?

c - 程序无法使用空格正确加密

c++ - 在 HPUX 上编译 NCURSES src