wrote base functions
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
#include<sys/wait.h>
|
||||
#include<unistd.h>
|
||||
#include<string.h>
|
||||
char **parse(char *line) {
|
||||
char **args= malloc(64 * sizeof(char *));
|
||||
int i = 0;
|
||||
char *token = strtok(line, " \t\n");
|
||||
while(token !=NULL) {
|
||||
args[i] = token;
|
||||
i++;
|
||||
token = strtok(NULL, " \t\n");
|
||||
}
|
||||
args[i] = NULL;
|
||||
return args;
|
||||
}
|
||||
int main() {
|
||||
char line[1024];
|
||||
while(1) {
|
||||
printf("$");
|
||||
fflush(stdout);
|
||||
char *result = fgets(line, sizeof(line), stdin);
|
||||
if(result == NULL) return 0;
|
||||
char **parsed = parse(line);
|
||||
if(parsed[0] == NULL) { free(parsed); continue; }
|
||||
pid_t pid = fork();
|
||||
if(pid == 0) {
|
||||
if(execvp(parsed[0], parsed) == -1 ) {
|
||||
perror("tinysh");
|
||||
exit(1);
|
||||
}
|
||||
} else if(pid > 0) {
|
||||
wait(NULL);
|
||||
}
|
||||
free(parsed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user