2009-10-27 6 views
1

Est-il possible que le _open() de win32 renvoie un FD valide qui est négatif?peut _open() renvoyer un résultat négatif fd?

En d'autres termes, la comparaison

if((fd=_open(...)) < 0) error...; 

aussi sûr que la forme

if((fd=_open(...)) == -1) error...; 

?

Je demande parce que tous les exemples msdn
sont sous forme if(fd == -1), et ne forment if(fd < 0).

+0

Sur une note non liée, pour le code Windows, je recommande d'utiliser CreateFile() au lieu de _open(), qui existe principalement pour la compatibilité avec d'autres plates-formes. – asveikau

Répondre

1

Non. Les valeurs négatives sont toutes des erreurs. En fait, si vous regardez read(), il affirme que le fd est compris entre 0 et 31.

1

Les descripteurs de fichiers Windows sont empruntés à des handles de fichiers MS-DOS 2.0, qui étaient basés sur des descripteurs de fichiers Unix, ce qui sont des indices dans la table de processus des blocs de contrôle de fichier. Un handle de fichier valide doit donc être non négatif.

+0

Le HANDLE retourné par CreateFile est un index dans la table du processus des objets du noyau. Les FD retournés par les conteneurs virtuels _open sont des index dans une table gérée par msv c-runtime. –

+0

True, dans MSC, il existe un niveau d'indirection supplémentaire, c'est-à-dire qu'un descripteur de fichier est un index dans une table de bibliothèque (spécifique au processus) contenant des handles de fichiers système. –

Questions connexes