Mam dwa proste programy klient-serwer:
Klient:
#include <stdio.h>
#include <stdlib.h>
#define FIFO_FILE "MYFIFO"
int main(int argc, char *argv[])
{
FILE *fp;
if ( argc != 2 )
{
printf("Wywolanie: fifoclient [napis]\n");
exit(1);
}
if((fp = fopen(FIFO_FILE, "w")) == NULL)
{
perror("fopen");
exit(1);
}
fputs(argv[1], fp);
fclose(fp);
return(0);
}
Serwer :
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <linux/stat.h>
#define FIFO_FILE "MYFIFO"
int main(void)
{
FILE *fp;
char readbuf[80];
/*tworzenie FIFO*/
umask(0);
mknod(FIFO_FILE, S_IFIFO|0666, 0);
while(1)
{
fp = fopen(FIFO_FILE, "r");
fgets(readbuf, 80, fp);
printf("Orzymany tekst: %s\n", readbuf);
fclose(fp);
}
return(0);
}
Te dwa programy zapisuje i kompiluje w jednym katalogu. Po uruchomieniu serwer program się zawiesza jednak plik "MYFIFO" powstaje. Na początku chce "ręcznie " sprawdzić i zrozumiec jak to działa ale bez tego nie moge ruszyć dalej.
Moim ostatecznym celem jest stworzenie dwóch takich procesów, które uchwyt do łącza nazwanego uzyskują poprzez parametry funkcji execl od procesu macierzystego.
Nie wiem czy dobrze rozumiem ale czy powinienem zrobić dwa dodatkowe procesy w ten sposów:
Rodzic ( tu wywołyje execl(dziecko1) lub (dziecko2) )
| |
/ /
dziecko1(serwer) dziecko2(klient)
lub
Rodzic ( tu wywołyje execl(dziecko1) lub (wnuk) )
|
/
dziecko1(serwer)
|
/
wnuk(klient)
Mam nadzieje że moje drzewka są czytelne, czy mój tok myślenia jest poprawny ?