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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top