LAB6: Cjevovod


Ostvariti cjevovod

Ostvariti mehanizam cjevovoda kojim mogu komunicirati i dretve različitih procesa sa sljedećim svojstvima i sučeljima:
  • stvaranje novog cjevovoda ili otvaranje postojećeg: int pipe_open(char *name, size_t size);
    • vraća opisnik (id) ili -1 u slučaju greške
    • ako već postoji onda se size ignorira
  • slanje u cijev: int pipe_write(int id, char *data, size_t size);
    • kod slanja treba sve poslati (size bajtova)
    • blokirati dretvu ako to nije moguće (poslati koliko se može i onda blokirati dretvu)
    • slati podatke slijedno - po redu poziva
  • čitanje iz cijevi: int pipe_read(int id, char *data, size_t size);
    • kod primanja treba pročitati size bajtova ili manje ako ih toliko nema u cijevi
    • ako nema ništa u cijevi, može se čekati na podatke ili pak samo vratiti grešku
Ne mora ići kroz mehanizam datoteka (open/read/write)!

Preporuka je pogledati ostvarenje poruka i na sličan način ostvariti cjevovode.

Pokazati rad s nekoliko procesa i cjevovoda.

Primjer scenarija:
  1. P1 (početni proces) pri pokretanju stvara C1 (10) i C2 (20) te stvara P2 i P3
  2. P2 otvara C1 i spava 5 s
  3. P3 otvara C1 i C2
  4. P1 u petlji: šalje poruku "123456" u C1; čita iz C2 dok ne pročita 10 znakova
  5. P2 u petlji: šalje poruku "abcdef" u C1; spava 5 s
  6. P3 u petlji: čita (do) 5 znakova, ispisuje primljeno (možda i ništa); šalje "ABCDEFG" u C2; spava 5 s