Je ne suis pas en mesure d'ouvrir/créer un fichier correctement en utilisant la fonction open(), donc j'ai pensé que l'utilisation de messages errno m'aidera à comprendre la raison. Cependant, je ne sais pas comment définir le if(), donc il m'imprime l'erreur. Je sais que le code comme cela devrait fonctionner:Comment imprimer errno tout en sauvant la valeur de la fonction?
if(open(handle,O_RDWR | O_CREAT) == -1){
printf("%s\n",strerror(errno));
}
mais si je veux sauver la valeur de l'open() à ma variable et si elle est -1 puis imprimer l'erreur aussi bien? Je ne veux pas appeler open() deux fois pour cela et je ne sais pas comment l'assigner si c'est ok et comment imprimer une erreur sinon.
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <ctype.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <errno.h>
int main(int argc, char **argv){
int handle,i,help;
int *array = malloc(5*sizeof(int));
float *red = malloc(5*sizeof(int));
array[0]=5;
array[1]=4;
array[2]=3;
array[3]=2;
array[4]=1;
handle = open(argv[1], O_RDWR | O_CREAT);
if(handle == -1){
printf("%s\n",strerror(errno));
}
printf("handle 1 %d\n",handle);
write(handle,array,20);
close(handle);
handle = open(argv[1], O_RDONLY);
lseek(handle,0,SEEK_SET);
printf("handle %d\n",handle);
help=read(handle,&red,20);
printf("pomoc %d\n",help);
for(i=0; i<5; i++){
printf("%d\n",(int)red[i]);
}
close(handle);
return 0;
}
c'est mon code "essayer" parce que je ne suis pas sûr comment la fonction read() fonctionne, donc je voulais essayer si je peux jeter n'importe quel type de pointeur là et lire toute quantité d'octets et si cela fonctionnera, mais je ne peut même pas passer la partie d'ouverture. – ligazetom
Notez que vous ne devez pas continuer comme si le descripteur était ouvert après avoir signalé l'erreur. Et l'erreur doit être signalée sur le flux d'erreur standard, pas sur la sortie standard. –