Probleme avec fcntl

toetoe89 Messages postés 15 Statut Membre -  
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

j'essaie de tester la fonction fcntl mais les tests donnent un resultat assez surprenant :

En fait ,pour le Code suivant,normalement,la fonction doit retourner O_WRONLY, sauf que ça retourne 32769 :S

int main(int argc, char *argv[]) {
int desc = open("temp.txt",O_WRONLY|O_CREAT,S_IREAD|S_IWRITE); //ouverture du fichier
char buf[25];
memset(buf,0,sizeof(buf));
strcpy(buf,"hello\n");
write(desc,buf,strlen(buf)); //ecriture du buffer
int a = fcntl(desc,F_GETFL); //resultat erroné !!!
printf("la valeur de a : %i\n",a);
close(desc);
return 0;
}
merci d'avance pour toute réponse instructive ..

4 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Il est possible qu'il y ait d'autre attributs auxquels tu n'as pas pensé.
Essai plutôt :
printf("écriture seule ? %i\n",a&O_WRONLY);
0
toetoe89 Messages postés 15 Statut Membre
 
je viens d'essayer mais ça change rien ! en fait ,je comprends pas l'origine de la valeur retournée ..
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
ça te retourne quoi ? en fait, j'ai mal réfléchis, pour être clair c'est :
printf("écriture seule ? %i\n",a&O_WRONLY==O_WRONLY);
qu'il faut écrire
0
toetoe89 Messages postés 15 Statut Membre
 
desolé mais ça change rien ,en fait ,si j'ajoute O_RDONLY lors du open ,je vois que ton printf donne le meme resultat : 1 ...je suis vraiment perdu là
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
ce que donne mon dernier printf c'est la présence ou nom de O_WRONLY, il ne présuppose pas le reste. Si tu veux tout :
printf("écriture seule ? %i\n",a&O_WRONLY==O_WRONLY);
printf("lecture seule ? %i\n",a&O_RDONLY==O_RDONLY);
printf(creation ? %i\n",a&O_CREAT==O_CREAT);
etc.
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Un doute m'envahi...
Question stupide, mais on ne sais jamais...
Tu ne t'attends tout de même pas à voir écris "O_WRONLY" sur la console tout de même ? (rassure-moi !)
0
toetoe89 Messages postés 15 Statut Membre
 
loul non mais j'ai deja évalué les valeurs O_WRONLY et O_RDONLY ,et je m'attends à ce que fcntl retourne O_WRONLY ce qui n'est pas le cas de mon programme
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je dirai que c'est parceque tu ne t'attends pas à ce qu'il faut, mais bon, je connais mal ce truc là.
Ce que je dirai, c'est que le flag doit au moins être présent, d'où mon test booleen. Comment le man n'est pas très locace, c'est difficile de savoir ce que doit retourner exactement la fonction.
0