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
Preporuka je pogledati ostvarenje poruka i na sličan način ostvariti cjevovode.
Pokazati rad s nekoliko procesa i cjevovoda.
Primjer scenarija:
- P1 (početni proces) pri pokretanju stvara C1 (10) i C2 (20) te stvara P2 i P3
- P2 otvara C1 i spava 5 s
- P3 otvara C1 i C2
- P1 u petlji: šalje poruku "123456" u C1; čita iz C2 dok ne pročita 10 znakova
- P2 u petlji: šalje poruku "abcdef" u C1; spava 5 s
- P3 u petlji: čita (do) 5 znakova, ispisuje primljeno (možda i ništa); šalje "ABCDEFG" u C2; spava 5 s