2011-12-26 17 views
1

LD_PRELOADに関する問題が発生します。HPUXとSolarisのLD_PRELOADが有効にならない場合があります。

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

を、私が見つかりました:通常、私は、ファイルを開くことはできませんが、タッチはそれを行うことができます!

なぜ!私はこれに長い間困惑していたのですか?私の下手な英語

+0

あなたが確信している、そのタッチは、レコード生成()関数を使用していますか? – Chris

+0

はい。 'truss -o touch.log touch testfile'というコマンドは、creat64関数を使ってファイルを作成していることを教えてくれました。 – littletiny

+0

シェルの組み込み 'touch'コマンドではなく、'/usr/bin/touch'を実行していることを確認してください。 –

答えて

1

して申し訳ありません最後にme.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 open /usr/include/*

/usr/include/fcntl.h:#define open64  open 
/usr/include/fcntl.h:extern int open(const char *, int, ...); 
関連する問題