Cześć mam problem z programem
Mam za zadanie utworzy potok za pomoca funkcji mkfifo z lini komend, a nastepnie z innego terminalu uruchomic niezalezne procesy producent i konsumenta, producent dostarcza informacje do potoku a konsument je odbiera. Problem polega na tym, że po uruchomieniu procesu Producent i Konsumenta zupelnie nic sie nie dzieje.
- Tworze potok mkfifo potok
- Uruchamiam program Producenta z innego terminalu jego kod(nazwe potoku przyjmuje rowniez z lini komend) :
int main ( int argc , const char *argv[])
{
if( argc == 2 )
{
producent(argv[1]);
}
else
printf("Nie poprawna ilość argumentów. Prawidłowy sposob ./nazwaprogramy potok , gdzie potok - to nazwa potoku utworzonego za pomoca funkcji mkfifo");
}
Ciało producent
void producent(const char *d)
{
char *buf; // wskaźnik do odczytu
FILE *fin; // wskaznik do pliku
buf = malloc(100); // alokujemy pamiec dla danych
fin = fopen ("magazyn.txt" , "r"); // Otwieramy plik magazyn.txt w trybie czytania z niego
int fin2 = open( d , O_WRONLY);
time_t tt; // konieczny do rand
do
{
if(fgets(buf , 100 , fin )== NULL) // Funckja fgets pobiera dane z pliku zapisuje je do tablicy buf
{
printf("plik sie skonczył\n");
exit(1);
}
printf("Producent %s " , buf) ; // Odpowiedni komunikat, oraz zawartosc
if( write( fin2 , buf , 100 ) == -1)
{
perror("Funckja write zwrocila blad ");
exit(2);
}
sleep(1);// Czekamy na proces potomny
}while( fin != NULL);
fclose(fin);
close(fin2);
}
Po uruchomieniu programu producent zupełni nic sie nie dzieje, tak jakby proces był zapauzowany , kompilator nie zwraca błędu. Co jest nie tak ?