microshell
This commit is contained in:
parent
a891e88afe
commit
3073884260
4
Microshell/Makefile
Normal file
4
Microshell/Makefile
Normal file
@ -0,0 +1,4 @@
|
||||
microshell: microshell.c
|
||||
gcc -Wall -ansi -o microshell microshell.c
|
||||
clean:
|
||||
rm microshell
|
68
Microshell/microshell.c
Normal file
68
Microshell/microshell.c
Normal file
@ -0,0 +1,68 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
const int max = 1000;
|
||||
|
||||
int cut(char **argv, char *command){
|
||||
int i=0;
|
||||
return i;
|
||||
}
|
||||
|
||||
int main (){
|
||||
while (1){
|
||||
char komenda[max], directory[max];
|
||||
if (getcwd(directory, sizeof(directory)) == NULL){
|
||||
perror("getcwd() error");
|
||||
return 1;
|
||||
}
|
||||
printf("[%s]$ ", directory);
|
||||
fgets(komenda, max, stdin);
|
||||
if (!strcmp(komenda, "exit\n"))
|
||||
break;
|
||||
|
||||
else{
|
||||
int i = 0, z, w = 0, x = 0;
|
||||
char polecenie[100], argument[100];
|
||||
char* argv[100];
|
||||
while (1){
|
||||
if(komenda[i] == 10){
|
||||
argv[w] = NULL;
|
||||
execvp(polecenie, argv);
|
||||
break;
|
||||
}
|
||||
else if (komenda[i] == 32){
|
||||
i+=1;
|
||||
x=0;
|
||||
continue;
|
||||
}
|
||||
else if(w==0){
|
||||
w=1;
|
||||
while(komenda[i] != 32 && komenda[i]!=10){
|
||||
polecenie[x]=komenda[i];
|
||||
i+=1;
|
||||
x+=1;
|
||||
}
|
||||
polecenie[x] = '\0';
|
||||
printf("%s\n", polecenie);
|
||||
argv[w-1]=malloc(x+1 * sizeof(char));
|
||||
strcpy(argv[w-1], polecenie);
|
||||
continue;
|
||||
}
|
||||
else{
|
||||
while(komenda[i] != 32 && komenda[i]!=10){
|
||||
argument[x]=komenda[i];
|
||||
x+=1;
|
||||
i+=1;
|
||||
}
|
||||
argument[x] = '\0';
|
||||
argv[w]=malloc(x+1 * sizeof(char));
|
||||
strcpy(argv[w], argument);
|
||||
w+=1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user