Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/10/2008, à 21: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, à 22: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, à 20: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, à 23: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, à 10:34

Jerepain

Re : Vider un tube nommé

Merci encore smile

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, à 02: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, à 10: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