根据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"
进行特殊处理的原因是什么?
谢谢,
查理
答案 0 :(得分:5)
因为它是一个特殊文件,所以它自带了read
和write
的定义。 (linux内核使用驱动程序层中的函数指针实现多态性)。显然,write
设备提供的/dev/null
版本不会使用您传入的指针。