2

別のスレッドからのヒントによると、ポインターの逆参照によってセグメンテーション違反が発生するかどうかを分析したいと思います。アイデアは、次のようなコードを書くことです:

bool IsPointerValid( void* pPointer )
{
    // when opening "/tmp/hugo" here, it works fine... but not with /dev/null??
    int iFD = open( "/dev/null", O_WRONLY );
    int iBytesWritten = write( iFD, pPointer, 4 );
    close( iFD );

    return iBytesWritten > 0;
}

しかし、何を渡しても、常にIsPointerValid(..)true が返されます。しかし、または fifo を開くと、期待どおりに動作します。NULL ポインタを に渡すと、が返されます。iBytesWritten4"/tmp/testfile"write(..)-1

を特別扱いする理由は何"/dev/null"ですか?

ありがとう、

チャーリー

4

1 に答える 1

5

これは特別なファイルであるため、独自のreadとの定義をもたらしますwrite。(Linux カーネルは、ドライバー層で関数ポインターを使用してポリモーフィズムを実装します)。どうやら、デバイスがwrite提供するバージョンは/dev/null、渡したポインターを使用していないようです。

于 2011-02-17T13:38:20.577 に答える