Write et file descriptor [RESOLU] [C] - C - Programmation
Marsh Posté le 05-08-2008 à 18:35:28
Facewindu a écrit : |
Il faut faire de la place pour ton buffer avec un tableau ou malloc().
Marsh Posté le 05-08-2008 à 18:36:42
je veux bien essayer avec fopen et fwrite mais je dois mettre quoi alors
fwrite(buffer, size_t size,n,file descriptor)
Dans mon cas, où le buffer contient des unsigned char, je mets quoi pour size ?
Marsh Posté le 05-08-2008 à 18:40:43
dap++ a écrit : |
ouais je vais tenter le malloc.
Pour donner plus de détails, mon buffer depend de plusieurs trucs, et je dois ecrire plusieurs fois des buffers consécutifs.
ca va si je fais un truc du genre
fd=open(blablabla);
buffer=malloc(1); // je connais pas la taille du buffer à ce moment
while(true){
//des trucs
//...
buffer=realloc(buffer,taille désormais connue);
buffer[0]=...
...
buffer[taille -1]=...
write(fd,buf,taille)
}
?
Marsh Posté le 05-08-2008 à 19:33:07
realloc() peut échouer et retourner NULL, dans ce cas-là il faut avoir gardé l'ancienne valeur du pointeur pour la zone vers laquelle il pointe. Et peut-être que tu t'entraînes juste à utiliser les syscalls mais il vaut mieux utiliser la bibliothèque du C en pratique.
Marsh Posté le 05-08-2008 à 19:39:21
alors si le realloc peut echouer comment je peux faire, en gardant ma structure while et le write dedans?
Marsh Posté le 05-08-2008 à 20:59:40
ReplyMarsh Posté le 06-08-2008 à 09:51:37
ca marche toujours pas, le prog fait des trucs bizarres.
Des fois, il se termine sans message d'erreur, mais avec rien d'écrit.
Des fois il me met le bad file descriptor
mon ouverture est comme ça :
fd_out = open("name", O_WRONLY | O_TRUNC | O_CREAT);
(d'ailleurs quand je fais ça, le fichier est en lecture seule, et je n'ai pas les autorisations quand on fait clic droit / Propriétés)
Ca vient peut-être de là. Dans ce cas quels sont les flags à mettre ?
Marsh Posté le 06-08-2008 à 16:47:55
Commence par tester le code de retour du open(). Forcément si tu n'as pas les droit d'écriture et que tu ouvres en écriture, open() va échouer...
Marsh Posté le 06-08-2008 à 17:51:39
oui, c'est bon.
J'ai du mettre dans le open les droits en écriture, ce qui est différent de O_WRONLY, et ça je l'avais pas compris.
Marsh Posté le 05-08-2008 à 18:03:46
Bonjour
Je veux écrire un buffer de unsigned char dans un fichier.
Pour cela j'ai fait
fd=open("nom du fichier destinataire",O_WRONLY);
Je bidouille mon buffer :
unsigned char * buffer;
buffer[0]=....
buffer[n]=.....
puis je fais write(fd,buf,n) et ca met des trucs bizarres.
Des fois ca me met (avec perror) : "bad file desciptor", ou bien "unable to open "nom du fichier destinataire"
Ca marchait avant, et je ne sais vraiment pas ce que j'ai changé pour que ça ne marche plus.
Message édité par Facewindu le 06-08-2008 à 17:51:58