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

  FORUM HardWare.fr
  Programmation
  C

  [C] Write et file descriptor [RESOLU]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C] Write et file descriptor [RESOLU]

n°1769733
Facewindu
Posté le 05-08-2008 à 18:03:46  profilanswer
 

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
mood
Publicité
Posté le 05-08-2008 à 18:03:46  profilanswer
 

n°1769773
Joel F
Real men use unique_ptr
Posté le 05-08-2008 à 18:31:27  profilanswer
 

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

n°1769774
dap++
Script kiddie
Posté le 05-08-2008 à 18:35:28  profilanswer
 

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
n°1769776
Facewindu
Posté le 05-08-2008 à 18:36:42  profilanswer
 

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 ?

n°1769779
Facewindu
Posté le 05-08-2008 à 18:40:43  profilanswer
 

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

n°1769790
dap++
Script kiddie
Posté le 05-08-2008 à 19:33:07  profilanswer
 

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
n°1769792
Facewindu
Posté le 05-08-2008 à 19:39:21  profilanswer
 

alors si le realloc peut echouer comment je peux faire, en gardant ma structure while et le write dedans?

n°1769842
dap++
Script kiddie
Posté le 05-08-2008 à 20:59:40  profilanswer
 
n°1769965
Facewindu
Posté le 06-08-2008 à 09:51:37  profilanswer
 

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 ?

n°1770298
matafan
Posté le 06-08-2008 à 16:47:55  profilanswer
 

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

mood
Publicité
Posté le 06-08-2008 à 16:47:55  profilanswer
 

n°1770322
Facewindu
Posté le 06-08-2008 à 17:51:39  profilanswer
 

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.


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

  [C] Write et file descriptor [RESOLU]

 

Sujets relatifs
[RESOLU]fonction mail qui ouvre messagerie[Resolu] Parse error
[ résolu] script création imprimante[RESOLU] Question sur la balise <a>
[RESOLU] vba excel connaitre le nombre de colonnes[RESOLU] menu récurrant
MAJ aide probléme mini calculatrice en " C " (debutant)[C#] Aspirer les pages web d'un site web
__LINE__ et __FILE__[RESOLU] Centrage background css
Plus de sujets relatifs à : [C] Write et file descriptor [RESOLU]


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