type d'acces dans un fichier binaire en C

type d'acces dans un fichier binaire en C - C - Programmation

Marsh Posté le 09-06-2008 à 19:23:25    

:hello:  
Je voulais savoir si on peut lire et écrire en meme temps dans un fichier bianaire? et dans un fichier texte? si oui Comment ?
 
Merci d'avance.
 :jap:

Reply

Marsh Posté le 09-06-2008 à 19:23:25   

Reply

Marsh Posté le 09-06-2008 à 19:58:13    

- oui
- oui
- en ouvrant le fichier en mode rw:

 
Code :
  1. open("/tmp/test", O_RDWR | O_CREAT, S_IRUSR | S_IWUSR ...)
 

puis tu lis/écris dedans. A toi de gérer la position du pointeur (avec lseek(2), par exemple).


Message édité par Gf4x3443 le 09-06-2008 à 19:59:13
Reply

Marsh Posté le 09-06-2008 à 20:13:06    

Merci beaucoup mon ami
et esqu'on peut supprimer physiquement dans un fichier

Reply

Marsh Posté le 09-06-2008 à 20:26:25    

:(  
Est ce que la suppression physique dans un fichier existe sinon pourquoi???
merci d'avance les amis :jap:

Reply

Marsh Posté le 09-06-2008 à 22:11:33    

TSniper a écrit :

et esqu'on peut supprimer physiquement dans un fichier


 
Pas compris là
 
Mettre les caractères à null partout?

Reply

Marsh Posté le 09-06-2008 à 22:22:48    

on peut supprimer physiquement dans un fichier "texte ou binaire" ou non? Pourquoi?? et qu'est ce qu'on peut faire si on veut supprimer dans un fichier sans utiliser un autre fichier "un fichier d'échange"

Reply

Marsh Posté le 09-06-2008 à 22:34:01    

On ne peut pas lire/écrire directement dans un fichier, il faut appeler une fonction de positionnement (fseek, fsetpos, rewind) entre les deux. Si c'est une écriture suivie d'une lecture fflush() peut aussi faire l'affaire.


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

Marsh Posté le 09-06-2008 à 22:37:55    

Qu'est ce que tu entends par "supprimer"? Ecraser une partie de son contenu? Utiliser O_TRUNC?

 

Si c'est effacer son contenu, remplis la partie en question de char '\0'.

 

Si c'est le tronquer, tu écrases le contenu avec un memmove() (ou memcpy si tu sais _vraiment_ ce que tu fais ici). Puis ftruncate(2).

 
dap++ a écrit :

On ne peut pas lire/écrire directement dans un fichier, il faut appeler une fonction de positionnement (fseek, fsetpos, rewind) entre les deux. Si c'est une écriture suivie d'une lecture fflush() peut aussi faire l'affaire.

 

Ca, ca n'est que dans le cas ou il utiliserait des flux de stdio. S'il n'utilise que des appels systèmes read(2), write(2), ca ne posera pas de problème, à part gérer le pointeur pour savoir ou il en est dans le fichier.

Message cité 1 fois
Message édité par Gf4x3443 le 09-06-2008 à 22:44:47
Reply

Marsh Posté le 10-06-2008 à 01:01:08    

mais fopen bon sang ! aucun intérêt open ici.

Reply

Marsh Posté le 10-06-2008 à 01:02:09    

Merci les amis mais quand on fait supprimer par '/0' c'est de la suppression logique et moi je veut savoir si la suppression physique* est possible??
 
*physique: effacer le contenu une fois pour toute  
 
avant
 
sonda
marc
pierre
marie
 
apres
 
sonda
pierre
 
c'est ça la suppression physique.

Reply

Marsh Posté le 10-06-2008 à 01:02:09   

Reply

Marsh Posté le 10-06-2008 à 01:10:14    

Taz a écrit :

mais fopen bon sang ! aucun intérêt open ici.

 

A part s'emmerder à jouer avec fileno pour appeler truncate/ftruncate, se prendre les pieds dans les buffers stdio pour gérer lecture et écriture simultanées (surtout avec memcpy/memmove), effectivement, open n'a strictement aucun intéret. Surtout quand on veut devenir malin et utiliser mmap pour des copies/déplacements.

 

Edit: D'ailleurs, on se demande ce que fait fopen justement, à part allouer un stream pour jouer et faire un open(2).

Message cité 1 fois
Message édité par Gf4x3443 le 10-06-2008 à 01:11:41
Reply

Marsh Posté le 10-06-2008 à 01:12:55    

TSniper a écrit :

Merci les amis mais quand on fait supprimer par '/0' c'est de la suppression logique et moi je veut savoir si la suppression physique* est possible??
 
*physique: effacer le contenu une fois pour toute  


 
Il faut juste savoir lire un peu:
 

Gf4x3443 a écrit :

Si c'est le tronquer, tu écrases le contenu avec un memmove() (ou memcpy si tu sais _vraiment_ ce que tu fais ici). Puis ftruncate(2).


 
En mappant le fichier avec mmap(2).

Reply

Marsh Posté le 10-06-2008 à 08:12:59    

Gf4x3443 a écrit :

D'ailleurs, on se demande ce que fait fopen justement, à part allouer un stream pour jouer et faire un open(2).


 
De tête c'est implementation dépendant, mais en général oui c'ets allocation d'un stream + open.

Reply

Marsh Posté le 10-06-2008 à 12:54:38    

Joel F a écrit :


 
De tête c'est implementation dépendant, mais en général oui c'ets allocation d'un stream + open.


ça bufferise est c'est un peu énorme niveau.

Reply

Sujets relatifs:

Leave a Replay

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