type d'acces dans un fichier binaire en C - C - Programmation
Marsh Posté le 09-06-2008 à 19:58:13
- oui
- oui
- en ouvrant le fichier en mode rw:
Code :
|
puis tu lis/écris dedans. A toi de gérer la position du pointeur (avec lseek(2), par exemple).
Marsh Posté le 09-06-2008 à 20:13:06
ReplyMarsh 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
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?
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"
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.
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.
Marsh Posté le 10-06-2008 à 01:01:08
ReplyMarsh 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.
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).
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?? |
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).
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.
Marsh Posté le 10-06-2008 à 12:54:38
Joel F a écrit : |
ça bufferise est c'est un peu énorme niveau.
Marsh Posté le 09-06-2008 à 19:23:25
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.