-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathredirect.c
More file actions
123 lines (99 loc) · 1.69 KB
/
redirect.c
File metadata and controls
123 lines (99 loc) · 1.69 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include"global.h"
void call_redirection(char **karsh,int len)
{
int iter1=-1,iter2=-1,iter3=-1,iter4=-1;
int x=len-1;
while(x>=0)
{
if(strcmp(karsh[x],">")==0)
{
iter1=x;
break;
}
x--;
}
x=len-1;
while(x>=0)
{
if(strcmp(karsh[x],"<")==0)
{
iter2=x;
break;
}
x--;
}
x=len-1;
while(x>=0)
{
if(strcmp(karsh[x],">>")==0)
{
iter4=x;
break;
}
x--;
}
int new_flag=0;
if(iter1<iter4)
{
new_flag=1;
iter1=iter4;
}
x=0;
while(x<len)
{
if( strcmp(karsh[x],"<")==0 || strcmp(karsh[x],">")==0 || strcmp(karsh[x],">>")==0)
{
iter3=x;
break;
}
x++;
}
char *new_parsed[40];
int fd,fd1,fd2,fd3;
int j=0;
x=0;
while(x<iter3)
{
new_parsed[j]=karsh[x];
j++;
x++;
}
new_parsed[j]=NULL;
int t=-1;
if(iter1!=t)
{
if(new_flag!=0)
{
fd = open(karsh[iter1+1], O_WRONLY | O_CREAT , 0777);
lseek(fd,0,SEEK_END);
}
else
{
fd = open(karsh[iter1+1], O_WRONLY | O_CREAT | O_TRUNC , 0777);
}
fd1=dup(1);
dup2(fd,1);
}
if(iter2!=t)
{
fd2 = open(karsh[iter2+1], O_RDONLY | O_CREAT , 0777);
fd3=dup(0);
dup2(fd2,0);
}
int pd = fork();
if(!pd)
{
execvp(new_parsed[0],new_parsed);
exit(0);
}
else if(pd>0)
{
int status;
int ddd;
waitpid(pd,&status,WUNTRACED);
}
if(iter1!=t)
dup2(fd1,1);
if(iter2!=t)
dup2(fd3,0);
}