Специальная обработка /dev/null в open и write?
В соответствии с подсказкой из другого потока я хочу проанализировать указатели, если их разыменование вызовет ошибки сегментации или нет. Идея состоит в том, чтобы написать код так:
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"
?
Спасибо,
Charly
1 ответ
Потому что это специальный файл, поэтому он имеет свое собственное определение read
а также write
, (Ядро linux реализует полиморфизм, используя указатели функций на уровне драйверов). Видимо версия write
предоставлено /dev/null
устройство не использует указатель, который вы передаете.