Działanie z komunikacji międzyprocesorowej

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Miks543
Piegowaty Guziec
Piegowaty Guziec
Posty: 0
Rejestracja: 27 cze 2020, 14:19
Wersja Ubuntu: 14.10
Środowisko graficzne: Unity
Architektura: x86

Działanie z komunikacji międzyprocesorowej

Post autor: Miks543 »

Siemaneczko
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);
        }
}
niestety tak próbuję lecz nie mogę dojść do konsensu.
Bardzo proszę o pomoc :)
Awatar użytkownika
mario_7
Administrator
Administrator
Posty: 8606
Rejestracja: 30 sie 2006, 13:11
Płeć: Mężczyzna
Wersja Ubuntu: 20.04
Środowisko graficzne: GNOME
Architektura: x86_64

Re: Działanie z komunikacji międzyprocesorowej

Post autor: mario_7 »

Uruchomiłeś to w ogóle? Działa jakkolwiek? Gdzie wysyłanie i obsługa sygnału?
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 65 gości