Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <sys/wait.h>
- #include <stdlib.h>
- #include <string.h>
- char **parse_cmdline( const char *cmdlin );
- int main(){
- while(1){
- write(1,"$ ",2);
- ssize_t size=0;
- char *input;
- getline(&input,&size,stdin);
- if(feof(stdin))break;
- char **array = parse_cmdline(input);
- free(input);
- //char *pointer = array[0];
- //if(pointer==NULL){continue;}
- pid_t pid = fork();
- if(pid < 0){
- perror("fork");
- free(array[0]);
- free(array);
- continue;
- }
- if(pid == 0){
- int p = execv(array[0],array);
- if(p < 0){
- perror(array[0]);
- free(array[0]);
- free(array);
- exit(0);
- }
- exit(0);
- }else{
- waitpid(pid, 0 ,0);
- }
- free(array[0]);
- free(array);
- }
- return 0;
- }
- char **parse_cmdline( const char *cmdlin ){
- int str_sym=0, last_sym=0, word=0, current_symbol, word_symbol;
- char *str = malloc(strlen(cmdlin) * sizeof(char));
- strcpy(str,cmdlin);
- char **new_str=malloc((word+1)*sizeof(char*));
- for(;str_sym<strlen(str);str_sym++)
- {
- if(str[str_sym]==' ' || str[str_sym]=='\n')
- {
- if(last_sym!=0) last_sym++;
- new_str[word] = malloc((str_sym - last_sym)*sizeof(char));
- for(current_symbol=last_sym,word_symbol=0;current_symbol<str_sym;current_symbol++,word_symbol++)
- {
- new_str[word][word_symbol]=str[current_symbol];
- }
- last_sym=str_sym;
- word++;
- new_str= realloc(new_str,(word+1)*sizeof(char*));
- }
- }
- return new_str;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement