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

  FORUM HardWare.fr
  Programmation

  [C++] sous unix, O_TEXT (fonction open())

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] sous unix, O_TEXT (fonction open())

n°168396
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 29-06-2002 à 14:01:34  profilanswer
 

/*Salut les développeurs,
 
voilà sous Linux je fais des petits tests, et voici une petite source :
 

Code :
  1. */
  2. #include <errno.h> //variable errno/
  3. #include <stdio.h> //printf/perror/
  4. #include <stdlib.h> //getenv/
  5. #include <string.h> //str.../
  6. #include <unistd.h> //write/close/
  7. #include <fcntl.h> //open/2eme parametre de open sauf 'O_TEXT'/
  8. #include <sys/stat.h> //3eme parametre de open/
  9. void main()
  10. {
  11. extern int errno;
  12. int handle, lng_ecrite;
  13. char *buff = new char[1024];
  14. strcpy(buff, "Variable d'environnement PATH : \n" );
  15. strcat(buff, getenv("PATH" ));
  16. strcat(buff, "\n" );
  17. if ((handle = open("var_path.txt", O_APPEND|O_CREAT|O_NDELAY|O_RDWR, S_IREAD|S_IWRITE)) == -1)
  18. perror("Erreur de création de fichier " );
  19. else
  20. {
  21. perror("Fichier bien créé " );
  22. if ((lng_ecrite = write(handle, buff, strlen(buff))) != strlen(buff))
  23.   printf("Impossible d'écrire les %d octets dans le fichier créé\n", strlen(buff));
  24. else
  25.   printf("Ecriture de %d octets réalisée dans le fichier créé\n", lng_ecrite);
  26. close(handle);
  27. }
  28. printf(buff);
  29. }
  30. /*


 
Mais j'ai un problème. La paramètre 'O_TEXT' n'est pas dans le fichier fnctl.h, donc pour que ce prog compile (sous gcc), je retire le paramètre 'O_TEXT'.
Si je laisse le paramètre 'O_TEXT', j'ai
---
[root@localhost win_e]# gcc prog.cpp
prog.cpp: In function `int main (...)':
prog.cpp:17: `O_TEXT' undeclared (first use this function)
prog.cpp:17: (Each undeclared identifier is reported only once for each
function it appears in.)
---
 
Donc j'aimerais savoir où est déclaré le paramètre 'O_TEXT'... Même si c'est vrai qu'il fonctionne très bien ainsi...
Au fait je sais que ce prog est pourri mais c'est mon premier programme unix, je fais juste des essais...
 
Merci, et @++
 
juju
*/
 


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
mood
Publicité
Posté le 29-06-2002 à 14:01:34  profilanswer
 

n°168407
ITM
Avatar peint à la main
Posté le 29-06-2002 à 14:39:56  profilanswer
 

C'est plus du C que du C++ ça ;)
 
Je ne peux pas trop t'aider, j'utilise surtout fopen et fprintf pour écrire du texte dans un fichier.


Message édité par ITM le 29-06-2002 à 14:41:53

---------------
iteme.free.fr | Mon feedback
n°168418
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 29-06-2002 à 15:24:29  profilanswer
 

ITM a écrit a écrit :

C'est plus du C que du C++ ça ;)
 
Je ne peux pas trop t'aider, j'utilise surtout fopen et fprintf pour écrire du texte dans un fichier.




salut,
 
merci quand même :hello:
En fait le C++ c'est du C objet, c'est vrai qu'on est pas obligé de l'utiliser, donc en effet c'est du C ;)
 
@++


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°168419
verdoux
And I'm still waiting
Posté le 29-06-2002 à 15:25:23  profilanswer
 

Y a pas de O_TEXT sous linux contrairement à DOS/Win.

n°168421
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 29-06-2002 à 15:27:05  profilanswer
 

Verdoux a écrit a écrit :

Y a pas de O_TEXT sous linux contrairement à DOS/Win.




merci verdoux ;)
Donc ça fonctionne très bien sans de toute façon !
 
@++


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com
n°168425
antp
Super Administrateur
Champion des excuses bidons
Posté le 29-06-2002 à 15:31:54  profilanswer
 

Verdoux a écrit a écrit :

Y a pas de O_TEXT sous linux contrairement à DOS/Win.




 
Et pour les plus curieux, voici l'explication :
 
sous Windows les retour de ligne occupent deux caractère : 0x0D 0x0A.
En mode texte si on rencontre un de ces deux caractères on met d'office les deux.
Donc si on ouvre, met en mémoire, puis réécrit un fichier en mode texte, il risque de prendre quelques octets de plus.
En Unix c'est juste 0x0A (il me semble, ou alors c'est l'autre), donc pas de différence de traitement.
 
Disclaimer : je ne suis pas sûr à 100% de tout ça, mais c'est ce que j'ai constaté "sur le terrain".


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°168426
juju_le_ba​rbare
Vous fiez pas aux apparences !
Posté le 29-06-2002 à 15:34:46  profilanswer
 

antp a écrit a écrit :

 
 
Et pour les plus curieux, voici l'explication :
 
sous Windows les retour de ligne occupent deux caractère : 0x0D 0x0A.
En mode texte si on rencontre un de ces deux caractères on met d'office les deux.
Donc si on ouvre, met en mémoire, puis réécrit un fichier en mode texte, il risque de prendre quelques octets de plus.
En Unix c'est juste 0x0A (il me semble, ou alors c'est l'autre), donc pas de différence de traitement.
 
Disclaimer : je ne suis pas sûr à 100% de tout ça, mais c'est ce que j'ai constaté "sur le terrain".



c'est bien ça...


---------------
Visitez mon site : http://www.jujubarbare.linux-fan.com

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

  [C++] sous unix, O_TEXT (fonction open())

 

Sujets relatifs
[C] Existe t'il une fonction équivalente à explode ?Problème de retour chariot dans la fonction mail
[javascript] envoyer formulaire en fonction d'un bouton radio.[open gl] pourquoi le rendu de mon cube n'est pas parfait ?
La taille d'un répertoire sous Unix est elle toujours fixe?La commande Find (unix)
javascript et la super fonction eval() -> je suis trop nul, mais c bonFonction C pour tester un mot de passe Unix
[Access] fonction Eval 
Plus de sujets relatifs à : [C++] sous unix, O_TEXT (fonction open())


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