Pages : 1
#1 Le 28/10/2008, à 20:47
- Jerepain
Vider un tube nommé
Bonjour !
Je voulais savoir s'il existait une technique pour vider le contenu d'un tube nommé préalablement ouvert en lecture, et ce sans passer par une ouverture en écriture.
#2 Le 28/10/2008, à 21:06
- MrWaloo
Re : Vider un tube nommé
le supprimer et le recréer ?
bestiale, sauvage, anarchique mais efficace !
"De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent !!" (Desproges)
UNIX is an operating system, OS/2 is half an operating system, Windows is a shell, MS-DOS is a boot sector virus.
Hors ligne
#3 Le 02/11/2008, à 19:31
- Jerepain
Re : Vider un tube nommé
Ok merci ^
Autre question : si j'écris dans un tube nommé, le fait de lire dans celui-ci détruit son contenu ?
#4 Le 02/11/2008, à 22:55
- MrWaloo
Re : Vider un tube nommé
oui, si tu en as besoin 2 fois, utilise "tee"
"De tous ceux qui n'ont rien à dire, les plus agréables sont ceux qui se taisent !!" (Desproges)
UNIX is an operating system, OS/2 is half an operating system, Windows is a shell, MS-DOS is a boot sector virus.
Hors ligne
#5 Le 04/11/2008, à 09:34
- Jerepain
Re : Vider un tube nommé
Merci encore
Encore une question : Quand je lis un tube, comment je fais pour afficher son contenu si je lis dedans juste après ?
Parce que dans mon programme il affiche tout d'un coup à la fin du programme au lieu d'afficher les variables une par une au fur et à mesure du déroulement du prog. Et ça m'embête pour faire une boucle while(1).
int main ()
{
FILE *fp;
int i=0;
int nb_elem;
fp=fopen("tube", "r | O_NONBLOCK" );if (fp == NULL) printf("erreur d'ouverture");
nb_elem=fread(&i, sizeof(int), 1, fp);
printf("%d",i); //ici il n'affiche pas encore i
if (nb_elem == -1) printf("erreur de lecture");
i=1;
fclose(fp);
fp=fopen("tube", "r | O_NONBLOCK" );if (fp == NULL) printf("erreur d'ouverture");
nb_elem=fread(&i, sizeof(int), 1, fp);
printf("%d",i); //Il affiche les i que à la fin du prog.
fclose(fp);
return 1;
}
#6 Le 16/02/2014, à 01:33
- dgicom
Re : Vider un tube nommé
pour remedier à ça utise open read write au lieu de fopen fread fwrite
Hors ligne
#7 Le 16/02/2014, à 09:59
- darunia_goron
Re : Vider un tube nommé
En effet, quand tu utilises printf, fwrite ou les autres fonctions qui prennent en entrée un flux, le contenu n'est pas directement écrit mais transféré dans un tampon. Lorsque le tampon est suffisamment plein ou lorsque il y a un retour à la ligne, write est implicitement appelé et le tampon est vidé.
Tu peux forcer la vidange du tampon à un endroit précis de ton code avec fflush. Par exemple, pour la sortie standard, utilise :
fflush (stdin);
Hors ligne
Pages : 1