IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

parametre flags? un int ?


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut parametre flags? un int ?
    Bonjour, j'ai besoin de réécrire "à ma sauce" la fonction système open:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int open(const char *pathname, int flags, mode_t mode)
    Mais un détail me turlupine, en effet on peut voir que le prama flags est un entier, et pourtant ce dernier prends une valeur parmis les suivantes {O_RDONLY,O_WRONLY,O_RDWR,O_CREAT}.

    Alors soit j'ai un problème pour percevoir un entier, soit il y a une subtilité qui m'échape, deplus le fait que flags soit un entier m'arrange bcp, car il me permet ainsi le traitement par un switch-case.
    En vous remerciant d'avance =)

  2. #2
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 47
    Par défaut
    Citation Envoyé par mensoif Voir le message
    Bonjour, j'ai besoin de réécrire "à ma sauce" la fonction système open:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int open(const char *pathname, int flags, mode_t mode)
    Mais un détail me turlupine, en effet on peut voir que le prama flags est un entier, et pourtant ce dernier prends une valeur parmis les suivantes {O_RDONLY,O_WRONLY,O_RDWR,O_CREAT}.

    Alors soit j'ai un problème pour percevoir un entier, soit il y a une subtilité qui m'échape, deplus le fait que flags soit un entier m'arrange bcp, car il me permet ainsi le traitement par un switch-case.
    En vous remerciant d'avance =)
    Salut,
    Merci de consulter cette page:
    http://www.mail-archive.com/bug-hurd.../msg16261.html

  3. #3
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Merci de ta réponse, et même si mon english pas très bon est, j'ai saisie plus ou moins l'idée. Deplus, ce petit & m'a fait penser que 0_{rdwr,rdonly,wronly} sont des macros n'est ce pas ?
    Si oui, reste à les définirs consienceusement, ou à jeter un coup d'oeil dans les sources linux :p
    J'vous tiens au jus !

    edit : j'ai trouvé quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      9 #define O_RDONLY    00000000
     10 #define O_WRONLY    00000001
     11 #define O_RDWR      00000002
    Ce qui me brouille un peu ..

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par mensoif Voir le message
    Merci de ta réponse, et même si mon english pas très bon est, j'ai saisie plus ou moins l'idée. Deplus, ce petit & m'a fait penser que 0_{rdwr,rdonly,wronly} sont des macros n'est ce pas ?
    Si oui, reste à les définirs consienceusement, ou à jeter un coup d'oeil dans les sources linux :p
    J'vous tiens au jus !

    edit : j'ai trouvé quelque chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      9 #define O_RDONLY    00000000
     10 #define O_WRONLY    00000001
     11 #define O_RDWR      00000002
    Ce qui me brouille un peu ..
    Il faut voir un flag comme un booléen sur un bit. Et comme on peut stocker 16 bits par entier, un entier peut gérer 16 flags à la fois

    Imagine le truc suivant
    #define GRAND 0x0001 // 00000001 en binaire
    #define HOMME 0x0002 // 00000010 en binaire
    #define BLOND 0x0004 // 00000100 en binaire
    etc...

    Tu peux, grâce à l'opérateur "|" ("ou" bit à bit) placer le flag qui t'intéresse de cette façon
    int valeur
    valeur=GRAND|BLOND => valeur prend la valeur 0x0005 soit 101 en binaire => soit positionnement des "1" correspondants à "GRAND" et "BLOND"

    Grâce à l'opérateur "&" ("et bit à bit") vérifier si un flag est ou n'est pas
    => if ((valeur & BLOND) == BLOND)

    Grâce à l'opérateur "^" ("xor bit à bit"), tu peux inverser un flag
    valeur=valeur^HOMME => si le flag y est, il est enlevé, s'il n'y est pas il est mis

    Et enfin grâce à l'opérateur "~" ("not bit à bit"), tu peux enlever un flag
    valeur=valeur&(~GRAND) => si le flag y est, il est enlevé

    Je t'invite à faire les calculs mathématiques correspondants pour plus de compréhension...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Membre éclairé Avatar de mensoif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 248
    Par défaut
    Votre réponse me clarifie bcp la vue, mais pour cause de *brouillage de la tête* je ne l'introduirais dans mon appli que demain, merci encore! : )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Type de parametre int ou Classe
    Par 0redd dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 24/10/2010, 16h22
  2. fonction avec 2 parametres qui me renvoie un int
    Par siro1 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 22/12/2009, 14h56
  3. [Reflection][Method] Passage de int en parametre
    Par seb_fou dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 28/07/2004, 17h47
  4. Réponses: 5
    Dernier message: 19/07/2004, 11h16
  5. [Reflection] Récupérer un constructeur ayant un paramètre int
    Par narmataru dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 09/07/2004, 09h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo