Pages : 1
#1 Le 25/03/2008, à 20:51
- _jean_
[Résolu] Illegal Seek/Pb Perror
Bonjour à tous,
Juste un petit code pour écrire dans un fichier et une erreur "lllegal seek" comme résultat !!!
#include "nclude.h"
int main(int argc, char **argv)
{
int fd,acs;
char *msg;
size_t sz;
msg = "coucou";
fd = open("BITEME", O_CREAT|O_RDWR|O_APPEND, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
perror("open");
printf("fd= %d\n", fd);
acs = access("./BITEME", R_OK|W_OK| X_OK | F_OK);
perror("access");
printf("acs : %d\n",acs);
lseek(fd, 0, SEEK_CUR);
perror("lseek");
write(fd, msg, 6);
perror("pb write");
close(fd);
perror("pb close");
return (0);
}
voilà la trace du prog:
open: Success
fd= 3
access: Illegal seek
acs : 0
lseek: Illegal seek
pb write: Illegal seek
pb close: Illegal seek
et malgré tout le fichier est créé et contient bien le "coucou" !!!!
quelqu'un aurait-il une explication ???
Merci.
Jean.
Dernière modification par _jean_ (Le 27/03/2008, à 11:51)
Hors ligne
#2 Le 25/03/2008, à 21:30
- abetsic
Re : [Résolu] Illegal Seek/Pb Perror
Bonsoir,
Une fois que tu as utilisée errno avec un perror() il faut le remettre à zéro (errno=0; suffit).
En l'occurence c'est l'appel à perror qui fait une erreur visiblement, et en fait en lisant la page de man de perror, on s'apperçoit que lire la valeur de errno après un appel système qui a réussi (qui a renvoyé 0 en général) n'a aucun sens puisque ce sont des librairies internes qui ont pu renvoyer une erreur et affecter errno.
#include <stdio.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc, char **argv)
{
int fd,acs;
char *msg="coucou";
size_t sz;
errno=0;
fd = open("BITEME", O_CREAT|O_RDWR|O_APPEND, S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH);
perror("open");
perror("perror");
errno=0;
printf("fd= %d\n", fd);
perror("printf");
errno=0;
acs = access("./BITEME", R_OK|W_OK| X_OK | F_OK);
perror("access");
printf("acs : %d\n",acs);
errno=0;
lseek(fd, 0, SEEK_CUR);
perror("lseek");
errno=0;
write(fd, msg, 6);
perror("pb write");
errno=0;
close(fd);
perror("pb close");
return (0);
}
Hors ligne
#3 Le 26/03/2008, à 11:13
- _jean_
Re : [Résolu] Illegal Seek/Pb Perror
j'aurai mis un petit bout de temps avant de penser à une erreur venant de perror !!!! Merci beaucoup ! Je vais tester ça ce soir et je rajouterai un petit résolu
Je comprends mieux maintenant la présence de tests if sur ces fonctions.
Hors ligne