OVH Cloud OVH Cloud

la valeur pointé par un FILE* est-elle intéressante?

23 réponses
Avatar
Miguel
Bonjour,
Dans l'un de mes "programmes", j'écris dans un fichier toujours au même
endroit, toujours le même nombre de caractères (en utilisant
cstdio/stdio.h).
Pour ce faire, j'utilise fseek avant chaque nouvelle écriture.
J'aimerais savoir si il y a un moyen de contourner cet appel à fseek (dans
un souci de gain de temps) en utilisant par exemple la valeur pointée par
mon FILE* flux (donc en gros si *flux est une strucutre utilisable et si le
code

FILE *flux_orig;
FILE *flux_dest;
fseek(flux_orig, là_où_je_veux, SEEK_SET);
*flux_dest = *flux_orig;
(flux_dest, "ce que je veux écrire");
*flux_dest = *flux_orig;
fprintf(flux_dest, "quelquechose d\'autre.")

va d'abord m'écrire "ce que je veux écrire" là où je veux, puis réécrire par
dessus "quelquechose d'autre")?
Merci d'avance
Miguel

3 réponses

1 2 3
Avatar
Harpo
Miguel wrote:

Bonjour,
Dans l'un de mes "programmes", j'écris dans un fichier toujours au
même endroit, toujours le même nombre de caractères (en utilisant
cstdio/stdio.h).
Pour ce faire, j'utilise fseek avant chaque nouvelle écriture.
J'aimerais savoir si il y a un moyen de contourner cet appel à fseek
(dans un souci de gain de temps)


Tu comptes gagner combien de millisecondes par an ?

*flux_dest = *flux_orig;


Hummm ...

Si tu as un système à peu près posixly correct, essayes 'man mmap',
sinon il est toujours possible d'ouvrir un fichier en read/write, il
est possible qu'il y ait des solutions sans qu'il ne soit besoin
d'écrire un driver.

Avatar
cedric
Emmanuel Delahaye wrote:
Une application vien lire un fichier déjà ouvert ? C'est risqué. Est-tu
sûr que ton ecriture est terminée (fflush()) ?


Je vois bien pourquoi ce n'est pas portable, mais je ne vois pas bien en
quoi c'est risqué. Tu sous-entends qu'il y a une meilleurs façon de
faire communiquer les deux programmes de l'OP, mais tu ne connais pas
son problème... À ce compte là, dès que ce n'est plus "Bonjour le monde"
ça devient risqué ;-)

Avatar
espie
Faut voir qu'en plus toutes les infos necessaires a la gestion du fichier
ne sont pas toujours juste derriere le FILE, il y a souvent un pimpl qui
traine...

c'est meme precisement le cas sur, au moins, tous les BSD, ou la bibliotheque
standard fait directement reference a la taille de la structure de base FILE
par ci, par la, et ou rajouter des infos derriere un pointeur auxiliaire
a permis d'eviter de changer d'ABI a chaque rajout...

Bref, copier des FILE, ou fabriquer les siens soi-meme, serait une
fort mauvaise idee.
1 2 3