打开和写入/ dev / null的特殊处理?

时间:2011-02-17 13:35:36

标签: linux gcc g++ dev-null

根据another thread的提示我想分析指针,如果它们的解引用会导致分段错误。我们的想法是编写如下代码:

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

"/dev/null"进行特殊处理的原因是什么?

谢谢,

查理

1 个答案:

答案 0 :(得分:5)

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