Nowe posty

clip Jaką dystrybucje polecacie pod mój sprzęt? (0)
Wczoraj o 21:45:38
clip Jaka dystrybucja pod mon sprzęt? (0)
Wczoraj o 21:43:55
xx BIOS nie widzi dysku z Linuxem (2)
2019-09-14, 10:41:31
xx Problem z antiX wersja live (0)
2019-09-12, 20:56:49
xx Serwer do Nauki (5)
2019-09-05, 07:35:50
cheesy pozycjonowanie (0)
2019-09-03, 13:54:08
xx iptables (1)
2019-09-03, 12:29:53
xx Co najpierw - przeczytać książkę i później obejrzeć film czy odwrotnie (0)
2019-08-30, 10:34:44
xx Lubuntu 19.04 problem z wklejeniem tekstu do ssh (1)
2019-08-28, 18:10:20
xx Migracja GRUB2 (0)
2019-08-24, 12:30:46

Autor Wątek: Odczyt z pliku i synchronizcja  (Przeczytany 1289 razy)

Offline pg2464

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 1
    • Zobacz profil
Odczyt z pliku i synchronizcja
« dnia: 2016-11-30, 16:22:47 »
Witam,

proszę o pomoc przy napisaniu programu, a w zasadzie to dwóch które będą działały synchronicznie z wykorzystaniem sygnałów SIGUSR1 i SIGUSR2, pierwszy program odczytuje z pliku linię i zapisuje do pliku bufor, drugi program odczytuje linie z bufora, po czym pierwszy nadpisuje linie w buforze.

pierwszy błąd pojawia się przy próbie zapisu do pliku bufor, write ( muszę użyć write) zawsze zwraca mi -1, niżej umieszczam części kodu
...
int bufor_plik=0;
...
void czytaj(int sig)
{
        int h;
FILE * fp = fopen("tekst.txt", "r");
char bufor[128];
while(fscanf(fp, "%128[^\n]\n", bufor) == 1)
{
lseek(bufor_plik,0,0);
h=write(bufor_plik, bufor, sizeof bufor);
                if(h==-1) printf("error");
kill(pidPot, SIGUSR1);
memset(&bufor 0, 128);
sleep(1);
}

...
main(){
....
bufor_plik = open("bufor", O_CREAT | O_RDWR);
...
}

Powyższy kod jest dla zadania gdzie zrobiłem to dla procesu macierzystego i potomka, ale nie wiem jak zrobić synchronizacje dla dwóch oddzielnych programów.

Z góry dzięki za pomoc.

Offline Filys

  • Users
  • Nowy na forum
  • *
  • Wiadomości: 28
    • Zobacz profil
Odp: Odczyt z pliku i synchronizcja
« Odpowiedź #1 dnia: 2016-12-05, 17:22:47 »
Joł chcesz pomocy z wytłumaczeniem czemu to idź na IRC freenode ##zandronum. I zagadnij mnie tam jak się pojawię na kanale (przeważnie jestem).

Generalnie na szybko, nigdy nie uzywaj kill i signal tylko sigaction i sigqueue. Nie możesz file używać jako fd bo to są dwa różne typy używa się fileno do przetworzenia file na fd.
Jak otworzysz zwyczajnie plik do zapisu tkz stworzysz przez funkcje open  i nie ustawisz permissions to nie masz żadnych praw w nim jako uzytkownik. Nitk nie ma.

kompiluj z flagami warnów + z valgrindem to Ci zapewnia przeważnie po pozbyciu się błędów działający kod.

Pozdro.