Иногда LD_PRELOAD в HPUX и Solaris не может вступить в силу - PullRequest
1 голос
/ 26 декабря 2011

У меня возникает проблема с LD_PRELOAD.

Когда я использую LD_PRELOAD в HPUX и Solaris, я обнаружил, что не могу присоединить свою функцию open64 / open / creat64 / creat в / usr / bin / touch, но моя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

наконец, извините за мой плохой английский

1 Ответ

1 голос
/ 31 декабря 2011

Я думаю, что ваша подпись функции неверна. (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, ...);
...