problème de fifo et de goto
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:
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.