1

LD_PRELOAD に関する問題が発生します。

HPUX と Solaris で LD_PRELOAD を使用すると、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;
}

これを行うと、次のことがわかりました。通常、ファイルを開くことはできませんが、タッチするとできます。

なぜ!私は長い間これに戸惑いました. 誰が私を助けることができます.thx

最後に、下手な英語でごめんなさい

4

1 に答える 1

1

関数のシグネチャが間違っていると思います。(char *の代わりにint)私のシステムでは、次の署名が表示されます。

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, ...);
于 2011-12-31T11:17:33.327 に答える