-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathes11.c
57 lines (47 loc) · 1.41 KB
/
es11.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
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <sys/wait.h>
int main(int argc, char *argv[])
{
int pid, p1p2[2]; // nella pipe salvo l'articolo da ricercare
char articolo[5]; // articolo formato da 5 caratteri ART. X.
char articolo_iniziale[15];
char articolo_finale[15];
char argomento_grep[80];
if (argc != 2)
{
printf("Numero argomenti sbagliato\n");
exit(1);
}
pid = fork();
if (pid == 0)
{
while (1)
{
pipe(p1p2);
close(p1p2[0]); // chiudo canale di lettura
printf("Inserisci l'articolo che vuoi ricercare");
scanf("%s", articolo);
if (strcmp(articolo, "esci") == 0)
{
close(p1p2[1]);
exit(0);
}
write(p1p2[1], articolo, sizeof(articolo));
if (pid == 0)
{
close(p1p2[1]);
read(p1p2[0], articolo, 5);
execl("/usr/bin/grep", "-z", "-o", argomento_grep, argv[1], (char *)0);
}
sprintf(articolo_iniziale, "ART. %d.", atoi(articolo));
sprintf(articolo_finale, "ART. %d.", atoi((articolo) + 1));
sprintf(argomento_grep, "-P '(?<=%s)(?s).*(?=%s)", articolo_iniziale, articolo_finale);
return -1;
}
}
return 0;
}