[C] Write et file descriptor [RESOLU]

Write et file descriptor [RESOLU] [C] - C - Programmation

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 cité 1 fois
Message édité par Facewindu le 06-08-2008 à 17:51:58
Reply

Marsh Posté le 05-08-2008 à 18:03:46   

Reply

Marsh Posté le 05-08-2008 à 18:31:27    

fopen et fwrite c'est trop sexy pour toi ou bien ?

Reply

Marsh Posté le 05-08-2008 à 18:35:28    

Facewindu a écrit :


Je bidouille mon buffer :
unsigned char * buffer;
buffer[0]=....
buffer[n]=.....


Il faut faire de la place pour ton buffer avec un tableau ou malloc().


---------------
dap.developpez.com
Reply

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 ?

Reply

Marsh Posté le 05-08-2008 à 18:40:43    

dap++ a écrit :


Il faut faire de la place pour ton buffer avec un tableau ou malloc().


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)
}
 
?

Reply

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.


---------------
dap.developpez.com
Reply

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?

Reply

Marsh Posté le 05-08-2008 à 20:59:40    

Reply

Marsh 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 ?

Reply

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...

Reply

Marsh Posté le 06-08-2008 à 16:47:55   

Reply

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.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed