-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpotok_nazwany.c
69 lines (58 loc) · 1.56 KB
/
potok_nazwany.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* \file potok_nazwany.c
* \author Gorka Mateusz
* \brief Komunikacja procesów przez potok nazwany
*
* Program przesyła pliki tekstowe podane w argumentach wywołania
* poprzez potok nazwany, zwany kolejką,
* który możemy odczytać uruchamiając w drugim terminalu
* polecenie:
* ```
* cat /tmp/kolejka
* ```
*
* @copyright Copyright (c) 2020
*
*/
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/stat.h>
int main( int argc, char **argv ){
int i = 1; //< Licznik argumentow
char *nazwa_kolejki = "/tmp/kolejka"; //< Nazwa kolejki
int plik, kolejka; //< Wskazniki plikow
int n; //< Wielkosc buforu
char bufor[256]; //< Bufor
if( argc == 1 ){
fprintf(stderr, "Oczekiwano nazw pliku przy wywolaniu progrmau\n");
return 5;
}
/// Tworzenie potoku nazwanego
if( mkfifo(nazwa_kolejki, 0666) < 0 ){
fprintf(stderr, "Blad stworzenia kolejki, prawdopodobnie kolejka juz istnieje\n");
// return 1;
}
/// Otwiernie potoku nazwanego
if( (kolejka = open(nazwa_kolejki, O_WRONLY)) < 1 ){
fprintf(stderr, "Blat otwarcia kolejki\n");
return 2;
}
while( i < argc ){
/// Czytanie pliku
if( (plik = open(argv[i], O_RDONLY)) < 0 ){
fprintf(stderr, "Blad otwierania pliku %s\n", argv[i]);
return 3;
}
/// Zapis pliku do potoku nazwanego
while( (n = read(plik, &bufor, 256)) > 0 )
if( write(kolejka, bufor, n) < 0 ){
fprintf(stderr, "Blad zapisu do potok\n");
return 4;
}
++i;
sleep( 2 );
}
close( kolejka );
return 0;
}