Bonjour à tous,

J'ai une fonction de lecture à partir d'un descripteur de fichier, il lit parfaitement les caractères d'un fichier texte par exemple, en les formatant comme je le veux, mais je n'arrive pas à l'utiliser pour lire dans un tube.

Le problème est qu'il arrive toujours à n=TAILLEBUF car je pense que ma lecture commence à lire dans le tube dès que j'ai exécuté mon programme, alors que je voudrais qu'il commence à lire uniquement lorsqu'un message arrive !

Quelles modifications apporter à mon code ?

Merci

PS: la chaîne qui doit être lue se termine par '\n', et lorsque j'essaye d'afficher ce qu'il a réussi à lire, j'obtiens des caractères spéciaux (comme ceux que l'on obtient lors d'un problème mémoire).

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
char* lecture(int fd)
{	
	/* Déclaration des variables qui nous seront utiles */
	int n = 0;
 
	/* Allocation d'une zone mémoire allant pouvoir contenir la chaîne lue dans le fichier */
	char *chaine = NULL;
	chaine = malloc((TAILLEBUF +1) * sizeof(char)) ;
 
	if (chaine == NULL) { /* On vérifie que le malloc s'est bien effectué */
          fprintf(stderr, "Erreur lors de l'allocation mémoire \n");
          exit(EXIT_FAILURE);
	}
 
	/* On effectue la lecture caractères après caractères jusqu'à rencontrer un saut de ligne */
	do {
		read(fd, &chaine[n], sizeof(char));           
		n++;
	}
	while (n < TAILLEBUF && chaine[n-1] != '\n');
 
	/* On formate la chaîne de caractères obtenue en ajoutant un \0 à la fin */
	chaine[n] = '\0';
 
	/* On affiche un message d'erreur si la boucle s'est terminée avant d'avoir pu lire la ligne entièrement */
	if(n == TAILLEBUF) {
 
		fprintf(stderr, "Erreur : La ligne était trop longue et n'a pas été lue entièrement !\n");
		exit(EXIT_FAILURE);
	}
 
	/* Si la lecture s'est bien passée, on retourne notre chaîne */
	else
	return chaine;
}