#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <pthread.h>
char linia[100];
pthread_mutex_t muteks = PTHREAD_MUTEX_INITIALIZER;
int ile_lini(){
char linia[100];
int x=0;
FILE *plik = fopen("czytaj.c","r");
while(fgets(linia,100,plik)!=NULL){
x=x+1;
};
fclose(plik);
return x;
}
void funkcja(int operator){
int licznik=0,ilosc_lini;
ilosc_lini=ile_lini();
if(operator==1)
{
FILE *plik = fopen("czytaj.c","r"); //Odczyt z pliku
while(licznik<ilosc_lini){
pthread_mutex_lock(&muteks);
fgets(linia,100,plik);
printf("\nWyswietlam napis: %s",linia);
licznik=licznik+1;
sleep(1);
pthread_mutex_unlock(&muteks);
};
fclose(plik);
}
if(operator==2){
while(licznik<ilosc_lini){
//pthread_mutex_lock(&muteks);
FILE *plik2 = fopen("wynik1.txt","a");
fputs(linia,plik2);
fclose(plik2);
licznik=licznik+1;
sleep(1);
//pthread_mutex_unlock(&muteks);
}
}
}
void *wywolanie(void *arg)
{int *tab = ((int *) arg);
funkcja(tab[0]);
}
int main()
{
pthread_t w1,w2,w3;
int zapis[1];
zapis[0]=2;
pthread_attr_t atrybut;
pthread_attr_init(&atrybut);
pthread_attr_setdetachstate(&atrybut, PTHREAD_CREATE_JOINABLE);
pthread_create(&w1, &atrybut, &wywolanie, &zapis);
funkcja(1);
//pthread_create(&w1, NULL, &wywolanie, &zapis);
return 0;
}
Wątek główny powinien odczytywać linie z pliku czytaj.c do bufora "linia", natomiast wątek dodatkowy powinien zapisywać zawartosc zmiennej "linia" do pliku wynik.txt, niestety program nie działa.
Czytałem już dziesiątki stron gdzie było napisane jak używać mutexów ale nie mam pojęcia dlaczego to nie działa.
Jeśli dodam lock i onlock w miejscu gdzie program zapisuje zmienna do pliku .txt do plik nawet nie zostanie utworzony. Jesli lock, i unlock wstawie tylko przy odczytywaniu pliku czytaj.c to do pliku .txt zapisze się kilkadziesiąt razy pierwsza linijka z pliku czytaj.c.
Już nie mam pojęcia co robię nie tak