Специальная обработка /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 устройство не использует указатель, который вы передаете.

Другие вопросы по тегам