Иногда LD_PRELOAD в HPUX и Solaris не действует.

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

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

когда я это делаю, я обнаружил: обычно я не могу открыть файл, но сенсорный экран может это сделать!

почему! я был озадачен этим в течение длительного времени. кто может мне помочь.спасибо

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


person littletiny    schedule 26.12.2011    source источник
comment
Вы уверены, что touch использует функцию creat()?   -  person Chris    schedule 27.12.2011
comment
да. команда truss -o touch.log touch testfile сказала мне, что она использует функцию creat64 для создания файла.   -  person littletiny    schedule 28.12.2011
comment
Убедитесь, что вы выполняете /usr/bin/touch, а не встроенную в вашу оболочку команду touch.   -  person Piotr Praszmo    schedule 31.12.2011


Ответы (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, ...);
person Chris    schedule 31.12.2011