Bonjour,
apprès avoir fait une opération pareille :
comment rendre à descripteur son comportement initial ? J'ai pas trouvé O_BLOCK.Code:
1
2 fcntl(descripteur, F_SETFL, O_NONBLOCK);
Version imprimable
Bonjour,
apprès avoir fait une opération pareille :
comment rendre à descripteur son comportement initial ? J'ai pas trouvé O_BLOCK.Code:
1
2 fcntl(descripteur, F_SETFL, O_NONBLOCK);
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 :oops: ).
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.
Ben non. Pour forcer un bit à zéro, on ne fait pas un xor. On fait &~ ...Citation:
Envoyé par ciol2.6.12
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 ?
j'ai fais des tests, apparemmentest équivalent àCode:status & ~O_NONBLOCK
merci à tousCode:status ^ O_NONBLOCK
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)