Gestion spéciale de / dev / null en ouvert et en écrivant?
Question
selon un indice de un autre fil Je veux analyser les pointeurs, si leur déréférence provoquerait ou non des défauts de segmentation. L'idée est d'écrire du code comme ceci:
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;
}
Mais quand je passe à IsPointerValid(..)
, ça revient toujours vrai - parce que iBytesWritten
est toujours 4
. Mais lors de l'ouverture "/tmp/testfile"
ou un FIFO, cela fonctionne comme prévu: passer le pointeur nul vers write(..)
, ça revient -1
.
Quelle est la raison de ce traitement spécial de "/dev/null"
?
Merci,
Charlot
La solution
Parce que c'est un fichier spécial, il apporte donc sa propre définition de read
et write
. (Le noyau Linux implémente le polymorphisme à l'aide de pointeurs de fonction dans la couche de pilote). Apparemment la version de write
fourni par le /dev/null
L'appareil n'utilise pas le pointeur que vous transmettez.