2009-05-14 6 views

Répondre

2

La documentation implique qu'EINVAL serait le résultat si l'un des paramètres était invalide. Puisque "r+" doit être un pointeur valide, et en supposant qu'il ait été compilé _SH_DENYRW doit être un indicateur valide, la seule question restante est de savoir si votre variable path n'est pas NULL, pointe vers la mémoire qui existe et peut être lue, et contient une valeur valide. nom du chemin

Je viens d'essayer ce qui suit: «Ouvrez ok »

#include <stdio.h> 
#include <share.h> 

int main(int argc, char **argv) 
{ 
    FILE *f; 

    if (argc != 2) { 
     fprintf(stderr, "Usage: %s file\n", argv[0]); 
     exit(1); 
    } 
    f = _fsopen(argv[1], "r+", _SH_DENYRW); 
    if (f) { 
     printf("Open ok.\n"); 
     fclose(f); 
    } else { 
     perror(argv[1]); 
    } 
    return 0; 
} 

Sur les fichiers qui existent et peuvent être écrits, quelle que soit leur taille, il imprime, ce qui signifie que _fsopen() réussi. Deux autres cas:

Un fichier en lecture seule:

 
C:>fsopen ro.txt 
ro.txt: Permission denied 

Aucun fichier:

 
C:>fsopen nosuchfile 
nosuchfile: No such file or directory 

Un fichier de périphérique:

 
C:>fsopen NUL: 
Open ok. 

Un fichier de longueur nulle:

 
C:>fsopen zero.txt 
Open ok. 
Questions connexes