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

C Discussion :

descripteur bloquant à non bloquant et vice versa


Sujet :

C

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut descripteur bloquant à non bloquant et vice versa
    Bonjour,
    apprès avoir fait une opération pareille :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fcntl(descripteur, F_SETFL, O_NONBLOCK);
    comment rendre à descripteur son comportement initial ? J'ai pas trouvé O_BLOCK.

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Points : 6 498
    Points
    6 498
    Par défaut
    A tout hasard, peut-être en essayant avec ~O_NONBLOCK.
    Tu lis le status avec F_GETFL , tu fais un & avec ~O_NONBLOCK. et tu fais ensuite un F_SETFL du résultat obtenu. (absolument sans garantie ).

  3. #3
    Membre régulier
    Inscrit en
    Août 2005
    Messages
    89
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 89
    Points : 91
    Points
    91
    Par défaut
    pour rendre non bloquant :

    status = fcntl(descripteur, F_GETFL);
    status = fcntl(descripteur, F_SETFL, status | O_NONBLOCK);

    bloquant :

    status = fcntl(descripteur, F_GETFL);
    status = fcntl(descripteur, F_SETFL, status ^ O_NONBLOCK);

    edit :
    | = ou binaire et ^ = XOR, entre les bits de 2 entiers.

  4. #4
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Citation Envoyé par ciol2.6.12
    status = fcntl(descripteur, F_SETFL, status ^ O_NONBLOCK);
    Ben non. Pour forcer un bit à zéro, on ne fait pas un xor. On fait &~ ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    re,
    Je suis un peu perdu en fin compte: déjà pour rendre "non bloquant", j'utilise une seule instruction (dans le premier message) et ça fonctionne.

    Quel est finalement la méthode pour rendre de nouveau bloquant ?

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    136
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 136
    Points : 133
    Points
    133
    Par défaut
    j'ai fais des tests, apparemment est équivalent à merci à tous

  7. #7
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 589
    Points
    41 589
    Par défaut
    NON.

    Ce n'est équivalent QUE si le flag O_NONBLOCK est déjà positionné.
    Sinon, utiliser l'opérateur ^ le positionnera.

    (Alors que & ~O_NONBLOCK retirera le flag à tous les coups, qu'il soit positionné ou non)

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/01/2006, 01h26
  2. Réponses: 5
    Dernier message: 02/09/2005, 13h47
  3. Rendre la lecture non bloquante
    Par Charlinecha dans le forum API standards et tierces
    Réponses: 4
    Dernier message: 05/07/2005, 16h46
  4. Réponses: 3
    Dernier message: 16/03/2004, 17h42
  5. [API] Communication série NON-bloquante : OVERLAPPED/Thread
    Par Rodrigue dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/11/2003, 14h43

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