Próbuje zrobić projekt, w którym muszę utworzyć parę procesów producent-konsument komunikujących się za pomocą kolejki FIFO.
Celem tego jest utworzenie producenta, który czyta wiersz z pliku tekstowego i wysyła poprzez FIFO do konsumenta po czym wysyła sygnał INT. Konsument po jego otrzymaniu odczytuje kolejkę FIFO a następnie wpisuje jej zawartość na stdout. Ma tak chodzić aż nie natrafi na wiersz "nazwisko". Te procesy mają być powoływane za pomocą funkcji FORK().
Troszkę już popracowałem i mam taki skrypt:
Kod: Zaznacz cały
#include <stdio.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#define FIFO "fifoFile"
//autor: l.laszko@vizja.net
//program demonstruje uzycie kolejek FIFO do komunikacji pomiedzy dwoma procesami
//procesy powoluje funkcja fork, po ich powolaniu funkcja execl wywoluje ponownie kod programu z roznymi parametrami
void klient();
void serwer();
int main(int argc, const char *argv[]){
if(argc == 3) {
if(strcmp(argv[2],"CLIENT")) {
klient();
} else if(strcmp(argv[2],"SERVER")) {
serwer();
} else
exit(0);
}
mkfifo (FIFO, S_IFIFO|0666);
if(fork()) {
execl(argv[0], argv[0], FIFO, "SERVER", NULL);
} else {
execl(argv[0], argv[0], FIFO, "CLIENT", NULL);
}
return 0;
}
void klient() {
FILE *f;
char paczka[200];
while(1){
f = fopen(FIFO, "r");
fgets(paczka,200,f);
printf("Odebrano : %s\n\n", paczka);
fclose(f);
}
}
void serwer() {
FILE *f;
char paczka[200];
while(1){
f = fopen(FIFO, "w");
fprintf(stdout, "Podaj dane do wysłania : ");
fscanf(stdin, "%s", paczka);
fputs(paczka,f);
fclose(f);
sleep(1);
}
}
Bardzo proszę o pomoc
![Smile :)](./images/smilies/icon_smile.gif)