2016-05-12 1 views
-3

Est-ce que quelqu'un pourrait m'expliquer pourquoi l'ouverture d'un fichier échoue? Pourquoi imprimer "fichier" donnera -1? Est-ce un problème avec char *source?L'ouverture d'un fichier donne une valeur de retour inattendue.

int opf(char *source){ 
    int file; 
    file=open(source,O_RWR); 
    printf("%d",file); 
} 

Et est-il possible de faire quelque chose comme ceci: fichier est dans un autre répertoire, donc

int opf(char *source){ 
    int file; 
    file=open("some_directory/ %s",source,O_RWR); 
    printf("%d",file); 
} 

ici je reçois le « un pointeur en entier sans transtypage » erreur. J'ai essayé beaucoup de choses différentes mais je suppose que le problème réside dans le fait que je ne saisis pas correctement les concepts.

+2

Qu'est-ce que 'O_RWR? Voulez-vous dire 'O_RDWR? –

+1

En ce qui concerne votre deuxième question sans rapport (vous devriez vraiment poster deux questions) chercher et lire sur 'snprintf'. –

+3

Cela n'a rien à voir avec les pointeurs; vous essayez d'utiliser 'open' comme si c'était' printf'. Mais ce n'est pas 'printf'. C'est "ouvert". –

Répondre

8

De l'man page de open() (souligné dans)

Après avoir réussi, la fonction doit ouvrir le fichier et retourner un entier non négatif représentant le descripteur de fichier utilisé le plus petit numéro. Sinon, -1 doit être renvoyé et errno défini pour indiquer l'erreur. Aucun fichier ne doit être créé ou modifié si la fonction renvoie -1.

Par conséquent, dans votre cas, le open() a échoué. Vérifiez le errno pour obtenir plus de détails à ce sujet. Toutes les valeurs possibles pour errno sont également documentées dans la page liée.

Cela dit,

  1. O_RWR ne semble pas être un mode valide, O_RDWR est.
  2. Pour la deuxième approche, vous pouvez d'abord utiliser sprintf()/snprintf() pour créer la chaîne path, puis vous pouvez passer à open().