-
Notifications
You must be signed in to change notification settings - Fork 2
/
simple_shell.c
48 lines (47 loc) · 922 Bytes
/
simple_shell.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
#include "headers.h"
/**
* main - UNIX command line interpreter
* Return: Always 0 (Success)
*/
int main(void)
{ pid_t child;
char *line = NULL, **command = NULL;
size_t l_len = 0;
int status = 0, retVal = 0;
while (1)
{
if (isatty(STDIN_FILENO))
write(STDOUT_FILENO, "$ ", 2);
if (getline(&line, &l_len, stdin) == EOF)
break;
if (*line == '\n' || *line == '\t')
continue;
command = s_tok(line);
if (command == NULL)
continue;
if (check_builtin(line, command, &retVal) == 0)
{
child = fork();
if (child == 0)
{
if (execve(findpath(command[0], &retVal), command, environ) == -1)
{
_free_parent(line, command);
exit(retVal);
}
}
else
{
wait(&status);
_free_parent(line, command);
if (WIFEXITED(status))
retVal = WEXITSTATUS(status);
}
line = NULL;
}
else
_free_double_pointer(command);
}
free(line);
exit(status);
}