-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexecute.c
More file actions
145 lines (137 loc) · 2.66 KB
/
execute.c
File metadata and controls
145 lines (137 loc) · 2.66 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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
int tokenise(char *inp,char tokens[100][1024],char *delim);
void trim(char *inp);
int cd(char *inp,char *cwd,char *home);
void ls(int flag[26]);
void lscall(char *inp,char tokens[100][1024],char *cwd, char *home);
void process_terminated(int sig);
void pinfo(char *arg,int flag);
void syscom(char *command,char *arg);
void history_upd(char *com1,char *arg,char *home,int flag);
void redirect(char* inp,int flag);
void pipe_com(char *inp);
void execute_com(char * inp)
{
//printf("%s check\n",inp);
int redirection=0;
int out =0;
char com1[1024];
char arg[1024];
char pipe_temp[100][1024];
int pipe_flag = 0;
char cwd [1024];
getcwd(cwd,1024);
for(int ii=0;ii<1024;ii++)
{
if(inp[ii]=='>' || inp[ii]=='<')
redirection =1;
if(inp[ii]=='>')
out=1;
if(inp[ii]=='|')
pipe_flag=1;
}
for(int u=0;u<1024;u++)
{
com1[u] = '\0';
arg[u] = '\0';
}
trim(inp);
int i=0;
while(inp[i]!=' ' && inp[i]!='\t' && inp[i]!='\0')
{
com1[i] = inp[i];
i++;
}
com1[i] = '\0';
while(inp[i]==' ' && inp[i]!='\0')
i++;
int j=0;
while(1)
{
if(inp[i]=='\0')
break;
arg[j] = inp[i];
i++;j++;
}
arg[j] = '\0';
trim(arg);
trim(com1);
if(pipe_flag==1)
{
pipe_com(inp);
//return ;
}
else if(redirection==1)
{
redirect(inp,out);
}
// else if(strcmp("cd",com1)==0)
// {
// cd(arg,cwd,home);
// }
// else if(strcmp("pwd",com1)==0)
// {
// printf("%s\n",cwd);
// }
else if(strcmp("echo",com1)==0)
{
char tokens[100][1024];
char delim[] = " \t\r\n\v\f";
tokenise(arg,tokens,delim);
for(i=0;i<100;i++)
{
if(tokens[i][0]=='\0')
break;
else
{
trim(tokens[i]);
printf("%s",tokens[i]);
}
printf(" ");
}
printf("\n");
}
// else if(strcmp("ls",com1)==0)
// {
// char tokens[100][1024];
// tokenise(arg,tokens,delim);
// for(i=0;i<8;i++)
// {
// if(tokens[i][0]!='\0')
// {
// trim(tokens[i]);
// }
// else
// break;
// }
// lscall(arg,tokens,cwd,home);
// //printf("hey\n");
// }
else if(strcmp("pinfo",com1)==0)
{
char tokens[100][1024];
char delim[] = " \t\r\n\v\f";
tokenise(arg,tokens,delim);
if(arg[0]!='\0')
{
pinfo(arg,1);
}
else
{
char temp[10];
pid_t pid = getpid();
snprintf(temp,10,"%d",pid);
strcpy(arg,temp);
pinfo(arg,0);
}
}
// else if(strcmp("history",com1)==0)
// {
// trim(arg);
// history_upd(com1,arg,home,1);
// continue;
// }
else
{
syscom(com1,arg);
}
}