Ecrire dans un fichier - C - Programmation
Marsh Posté le 16-03-2005 à 07:26:05
tu peux aussi corriger moi si je me trompe utiliser la fonction: dup
http://www.linux-kheops.com/doc/ma [...] dup.2.html
Marsh Posté le 16-03-2005 à 08:35:41
Tonio94 a écrit : salut, |
Sans source c'est difficile de bien voir le pb... mais à mon avis c'est le "write" qui te donne ça
Explication: Le write écrit les octets en brut dans le fichier. par exemple, si tu as "i=123" et que tu fais un "write(fd, &i, sizeof(i))" tu écriras dans le fichier la valeur décimale "123" et non, comme tu le souhaiterais je pense, les caractères '1', '2' et '3'. Ensuite, tu fais "cat fichier" et t'as n'importe quoi. En revanche, si tu fais "od -x fichier" tu retrouveras probablement tes valeurs affichées en hexadécimal.
Pour écrire un texte avec "write", tu dois
1) avoir un tableau de char à ta disposition, par exemple "char txt[1024]"
2) remplir ton tableau avec le texte que tu veux, par exemple "sprintf(tab, "%d\n", 123)"
3) copier ce tableau dans le fichier, par exemple "write(fd, tab, strlen(tab))"
Ou alors utilise "fopen" et "fprintf"...
Marsh Posté le 17-03-2005 à 07:11:30
Citation : 1) avoir un tableau de char à ta disposition, par exemple "char txt[1024]" |
Tu fais ca et tu as un buffer overflow possible.
toujour spécifier la taille du buffer dans lequel tu va ecrire.
typiquement : snprintf(buffer, sizeof(buffer)-1, "format %d", argument);
C'est tres important.
Ensuite pour les fichier il n'existe pas 8467374673 methodes.
et bannisser les fopen et tout et tout... c du ******
open
close
write
read
stats
fcntl
...
Puis man un peut dans ta vie
?????ØÁ
Marsh Posté le 17-03-2005 à 08:07:10
plofplof a écrit :
|
Dans le principe, ok.
Citation : |
Pour une conversion numérique, il n'y a pas grand risque... La taille maximale est facilement prévisible...
Citation : |
Toutes ces fonctions sont bien jolies, mais pas forcément portables ni optimisées. Il n'y a aucune raison de ne pas utiliser les fonctions standards fopen() fgets() etc.
Marsh Posté le 17-03-2005 à 10:48:30
Yo,
Ces fonctions sont standard (SVr4, SVID, POSIX, X/OPEN et BSD 4.3.). Elle sont donc portable car elles fonctionnent sous *Nix et tout Windows en ajoutant '_' avant chaque fonction.
Si char text[] explose ca donnera un stack based buffer overflow.
Conversion ou pas c'est un automatisme a prendre.
Citation : |
C'est la difference entre l'ecriture en mode bytecode et byteread.
Le Bytecode c'est l'ecriture direct-value dans le fichier (ca donne un fichier non lisible par l'homme) (write(fd, &integer, sizeof(interger)): Ex:
Code :
|
Le Byteread c'est l'ecriture d'une donnée en mode human-readable. A savoir :
Code :
|
ave phun.
¨*%¥
Marsh Posté le 17-03-2005 à 11:12:56
plofplof a écrit :
|
Un petit
Code :
|
ne serait-il pas plus concis ?
Marsh Posté le 17-03-2005 à 13:11:17
dsls a écrit : Un petit
|
Si fd est un File Descriptor (POSIX.1 et pas standard C), ça ne marchera pas.
C'est pour ça que je recommande de s'en tenir aux fonctions standards du C...
Marsh Posté le 30-03-2005 à 19:33:42
Merci pour vos reponses je me replonge dedans! (avec du retard dsl)
Marsh Posté le 30-03-2005 à 19:35:05
En meme temps il me faudrait une fonction comme "puts" mais qui ne me mette pas de \n a la fin, quand j'utilise printf (dans mon cas) rien ne s'affiche, c'est surement pckil utilise un buffer...
Marsh Posté le 30-03-2005 à 21:40:18
Tonio94 a écrit : En meme temps il me faudrait une fonction comme "puts" mais qui ne me mette pas de \n a la fin, quand j'utilise printf (dans mon cas) rien ne s'affiche, c'est surement pckil utilise un buffer... |
http://mapage.noos.fr/emdel/notes.htm#fflush_stdout
Marsh Posté le 31-03-2005 à 06:03:56
Un off-by-one ousa ???
puis Tonio9783276 fait apres ton printf : fflush(stdout)
ca va flusher les buffer de IO_file dans la libc et ca va afficher ta phrase.
Marsh Posté le 31-03-2005 à 07:00:03
ok merci all
Marsh Posté le 31-03-2005 à 15:25:25
ok :-)
Marsh Posté le 31-03-2005 à 18:04:03
Tonio94 a écrit : En meme temps il me faudrait une fonction comme "puts" mais qui ne me mette pas de \n a la fin |
fputs
Marsh Posté le 16-03-2005 à 02:20:32
salut,
je voudrais faire une sorte d'history comme sous unix, c'est a dire ecrire dans un fichier tout ce que je passe en entree standard. J'ai une boucle infinie dans laquelle je mets ma fonction qui va m'ouvrir un fichier ac un open et qui va ecrire dedans ac un write mais lorsque je fais un cat sur le fichier cree il me sort n'importe quoi... A mon avis je me melange dans les parametres de open/read entre le fd renvoye par le open et l'ecriture dans le fichier a partir de l'entree standard (1) et non le fd renvoye...
need help! merci d'avance.
---------------
~ Msi z790 Gaming Plus Wifi | i9-12900K + Dark Rock Pro4 | 64Go G-Skill DDR4 4800 | RTX 3080 Ti