Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1222 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Équivalent C à binmode() en perl

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Équivalent C à binmode() en perl

n°1176711
tpierron
Posté le 15-08-2005 à 21:42:27  profilanswer
 

Bon, le problème est tout con, ça m'étonne qu'il n'ait pas encore été traité ici, mais je me casse les dents là dessus depuis quelques heures. J'ai beau chercher, je ne trouve rien.
 
Donc : comment faire pour éviter que cette p...n de libc sous Windows ne transforme les "\n" en "\n\r", sans refermer le descripteur (ça serait trop simple sinon). J'utilise gcc 3.4.2 sous Dev-Cpp 4.9.9.2
 
Le problème, c'est que je dois envoyer les données sur le descripteur stdout (qui est une socket ouverte par Apache dans un CGI). J'aurais bien utilisé perl, mais le programme en question fait des traitements beaucoup trop couteux pour perl.
 
Arf, et virer Windows n'est pas non plus une option, même si ce n'est pas l'envie qui me manque.


Message édité par tpierron le 15-08-2005 à 21:51:59
mood
Publicité
Posté le 15-08-2005 à 21:42:27  profilanswer
 

n°1176730
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-08-2005 à 22:29:44  profilanswer
 

tpierron a écrit :

Donc : comment faire pour éviter que cette p...n de libc sous Windows ne transforme les "\n" en "\n\r", sans refermer le descripteur (ça serait trop simple sinon). J'utilise gcc 3.4.2 sous Dev-Cpp 4.9.9.2


Ouvrir (ou reouvrir : freopen()) le flux en mode binaire ("wb" ou "rb" ).


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°1176738
tpierron
Posté le 15-08-2005 à 22:47:16  profilanswer
 

Emmanuel Delahaye a écrit :

Ouvrir (ou reouvrir : freopen()) le flux en mode binaire ("wb" ou "rb" ).


Arf, exactement la réponse que je ne voulais pas:
1. reopen utilise un argument sur le nom de fichier, que je n'ai pas.
2. Si je l'avais, il ferait un fclose() sur le troisième argument, et je ne pourrai plus retourner au client les données.
 
Sinon, j'ai aussi essayé :
* fdopen(fileno(stdout), "wb" ); : même symptôme.
* fcntl : F_GETFL undeclared blablabla ...

n°1176765
tpierron
Posté le 15-08-2005 à 23:39:30  profilanswer
 

P...n, j'ai trouvé. 5 heures de bidouillage. Histoire de se coucher moins idiot ce soir, la petite incantation magique pour contourner les bugs^Wfeatures de Windows:
 
setmode(fileno(stdout), O_BINARY); // première instruction de main()
 
Je ne sais pas si c'est portable, mais ça marche dans mon cas.
 
(edit: le plus drôle, c'est que j'ai trouvé ça dams les sources de perl 5.8.7. OpenSource rulez !!)


Message édité par tpierron le 15-08-2005 à 23:41:40
n°1176892
pascal_
Posté le 16-08-2005 à 10:31:15  profilanswer
 

Code :
  1. #ifdef WIN32
  2. _fmode = _O_BINARY;   /*sets default for file streams to binary */
  3. setmode(_fileno(stdin), O_BINARY);  /* make the stdio mode be binary */
  4. setmode(_fileno(stdout), O_BINARY);  /* make the stdio mode be binary */
  5. setmode(_fileno(stderr), O_BINARY);  /* make the stdio mode be binary */
  6. #endif


 
Je suis plus très sûr, mais je crois que ça vient du source de php.
 
edit: après vérif, c'est bien ça


Message édité par pascal_ le 16-08-2005 à 10:35:06

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Équivalent C à binmode() en perl

 

Sujets relatifs
equivalent de border-spacing pour IE ?[perl] récupéré le code source de plusieurs pages
[Perl] Récupérer le chemin de fichierEquivalent de Telnet sous WinXP en plus agréable
Perl et DBI SybaseAppel d'un JS en Perl
[JS] Equivalent à explode()Sent items en Perl
[perl]tableaux dynamiquessha-bang : #!perl
Plus de sujets relatifs à : Équivalent C à binmode() en perl


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR