Probleme avec fcntl

Fermé
toetoe89 Messages postés 13 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 6 septembre 2012 - 6 sept. 2012 à 13:58
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 6 sept. 2012 à 22:08
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 ..

A voir également:

4 réponses

Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
6 sept. 2012 à 14:05
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 13 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 14:39
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
Modifié par Char Snipeur le 6/09/2012 à 15:05
ç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 13 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 16:25
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
6 sept. 2012 à 16:35
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
6 sept. 2012 à 16:37
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 13 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 6 septembre 2012
6 sept. 2012 à 17:13
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
6 sept. 2012 à 22:08
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