Forum MOJA PASJA - PROGRAMOWANIE Strona Główna
http://www.programuj.com
  WikiWiki  FAQFAQ    SzukajSzukaj    UżytkownicyUżytkownicy    GrupyGrupy   RejestracjaRejestracja 
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 




Zadanie C.


 
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> C i C++
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
mackooo



Dołączył: 29 Sty 2016
Posty: 2

Post Zacytuj zaznaczone Odpowiedz z cytatem OCEŃ POST
Witam.
Potrzebuję pomocy z jednym zadaniem kompilowanym gcc na linuxie.
Jego treść to:
"Utworzyć parę procesów producent-konsument.Procesy komunikują się ze sobą za pomocą potoku (pipe'a). Protokół komunikacji jest następujący: konsument wysyła sygnał INT do procesu producenta, po czym odczytuje pipe'a, a następnie wypisuje jego zawartość na stdout; producent po otrzymaniu sygnału INT czyta (kolejny) wiersz z pliku tekstowego i wysyła go poprzez pipe do konsumenta. Powyższy cykl komunikacji powtarza się aż do ostatniego wiersza pliku lub do napotkania wiersza "_nazwisko_" (zawierający nazwisko autora programu). Procesy producenta i konsumenta powoływane się z jednego procesu macierzystego za pomocą funkcji fork()."
Korzystałem troszki z zadania, które omawiane było na zajęciach, jednak dalej mam problem. Program się kompiluje, uruchamia, ale nie działa. Czy ktoś jest w stanie to ogarnąć?
Oto kod:

c:
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define ROZM 10
void Wypisz(char *str)
{
   write (STDOUT_FILENO, str, strlen(str));
}   
int main()
{
   int  f;
   char line[ROZM];
   int do_potomka[2];
   int do_rodzica[2];
      // char line [ 128 ];
   if(pipe(do_potomka) < 0) return(1);
    if(pipe(do_rodzica) < 0) return(1);
    if((f=fork())==0)
  //klient
           {
               close(do_potomka[1]); // zamkniety do pisania, tylko odczyt z [0]
              close(do_rodzica[0]); // zamkniety do czytania, tylko zapis do [1]
            static const char stopword[] = "_nazwisko_";
             static const char filename[] = "file.txt";
              FILE *file = fopen ( filename, "r" );
            if ( file != NULL )
            {
              char line [ 128 ];
             int num_in;
              while ( fgets ( line, sizeof line, file ) != NULL )
              {
                if(line == stopword) {
                  Wypisz("stopword!");
                  break;
               }
                // num_in = atoi(line);
                 write(do_rodzica[1],line,ROZM);
              }
           
              fclose ( file );
            }
            else
             {
               perror ( filename );
             }
}
 //serwer

  close(do_rodzica[1]); //zamkniety do pisania
  close(do_potomka[0]); //zamkniety do czytania
 //read(do_rodzica[0],line,ROZM);
 // liczba1 = atoi(line);
  //read(do_rodzica[0],line,ROZM);
  //liczba2 = atoi(line);
    //suma = liczba1 + liczba2;
  //sprintf(line,"%d",suma);
  write(do_potomka[1],line,ROZM);
    waitpid(f, 0, NULL);       
    return 0;
}
Powrót do góry
Ogląda profil użytkownika Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum MOJA PASJA - PROGRAMOWANIE Strona Główna -> C i C++ Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach


hosting sponsorowany przez hosted.pl
Powered by phpBB © 2001, 2002 phpBB Group