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 - 因为iBytesWritten总是4。但是当打开"/tmp/testfile"或 fifo 时,它会像预期的那样工作:将 NULL 指针传递给write(..),它会返回-1

这种特殊待遇的原因是"/dev/null"什么?

谢谢,

查理

4

1 回答 1

5

因为它是一个特殊的文件,所以它自带了read和的定义write。(linux内核使用驱动层中的函数指针来实现多态性)。显然设备write提供的版本/dev/null没有使用你传入的指针。

于 2011-02-17T13:38:20.577 回答