Bonjour,
j'ai un problème les amis.
je dois déveloper un code qui permet de lire une commande dans une fifo, va chercher la reponse qui corrspond à cette commande et puis ecrire la réponse dans la fifo.
voila mon code:

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* fonction permettant d'extraire un mot dans un fichier texte*/
string read_line (FILE * f)
{
	string s;
	char c;
 
	fread(&c, 1, 1, f);
	while ((c != '\n') && (!feof(f)))
	{
		s += c;
		fread(&c, 1, 1, f);
	}
 
	return s;
}
 
/* on fonction qui cherche un mot dans une ligne*/
bool est_present (string & line, string & cmd)
{
	return line.find(cmd) != string::npos;
}
 
char getChar(string & line, string & cmd)
{
	int pos = line.find(cmd);
	const char * c = line.c_str() + pos + cmd.length();
	return (c);
}
/* fonction qui extrait la réponse*/
string getData (char * input_file, string & cmd)
{
	FILE * finput;
 
	finput = fopen(input_file, "r");i
	if (finput == NULL)
		return -1;
 
	string line;
	string output = 0;
 
	while (!feof(finput))
	{
		line = read_line (finput);
		if (est_present(line, cmd))
		output += getChar(line, cmd);
	}
 
	fclose(finput);
 
	return output;
}
 
/* la fonction d'entrée de mon programme qui fait appel aux autres fonctions*/
/* my function "entry point" */
 
test: void Test(vTtyName)
 
while (1)
{  
    /*did the fifo already exist? */
 
    test: if ((mkfifo(vTtyName, 0666) < 0) && (errno!= EEXIT))
	{
	    printf("the fifo already exists");
	}
 
    /* Read the Tty */
 
    if (open(vTtyName,O_RDWR | O_NDELAY)!=-1)
	{ 
	      if (read(fd,vMsg, strlen(vMsg)) != 0)
	      { 
		    string answer = getData(fifo.txt, vMsg);// the answer extracted from the text file
		    write(vTtyName, &answer, strlen(answer));//write in the fifo
	      }
 
	      else vTtyName++ && goto test;
	}
}
alors mes questions sont les suivantes:

1- une fifo est elle bidirectionnelle??
2- ce que j'ai nommé " vTtyName est une énumération, est ce que j'ai le droit de faire vTtyName++?
3- et je ne sais pas si le "goto test" que j'ai mis est just, je ne c'est pas parquoi je peut le remplacer??

merci d'avance pour votre aide.