Le fait que
stdout n'accepte pas
fseek est dû au fait que c'est habituellement un terminal. Si on le redirige vers un fichier, ça marche.
Ainsi avec un fichier eseek.c comme
// fichier eseek.c
#include <stdio.h>
int main(void) {
if (fseek(stdout,10, SEEK_CUR)) perror("fseek");
puts("ici\n");
return 0;
}
compilé avec
gcc -O -Wall eseek.c -o eseek
on n'a pas de diagnostic,
puis exécuté
dans un terminal avec
./eseek
on obtient bien l'erreur.
% ./eseek
fseek: Illegal seek
ici
Si on copie la source et qu'on y redirige la sortie standard il n'y a plus d'erreur
cp eseek.c fich.out
./eseek > fich.out
Pour que fseek fonctionne, il faut que ça soit sur un vrai fichier, pas un tube (nommé ou anonyme) ni une sockette ni un terminal.
Mais faire du fseek sur la sortie standard est de très mauvais goût. C'est même très mal élévé ];-)
----
Basile STARYNKEVITCH
Membre de l'
APRIL « promouvoir et défendre le logiciel libre » - adhérez vous aussi à l'APRIL!
Projet logiciel libre:
RefPerSys
Poste le Thursday 13 September 2007 19:56:10