Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Milestone 1
- int main(int argc, char *argv[])
- {
- char comm[100];
- printf("Introduceti comanda:");
- comm=scanf("%s", comm);
- if(strcmp(comm, "exit"))
- {
- printf("Exit");
- }
- return EXIT_SUCCESS;
- }
- // Milestone 2
- #include <stdio.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <stdlib.h>
- #include<fcntl.h>
- #include <unistd.h>
- #define BUFFER_SIZE 256
- #define READFILE_SIZE 4096
- char ** parseCMD( char * );
- void EXEC(char *, char *);
- int main(int argc, char * argv[])
- {
- char myPrompt[]= {'>', '_', '\0'};
- char *currLine = (char* ) malloc(sizeof(char) * BUFFER_SIZE),
- *command = (char* ) malloc(sizeof(char) * BUFFER_SIZE),
- *argument = (char* ) malloc(sizeof(char) * BUFFER_SIZE);
- scanf("%c", currLine);
- while((strcmp(currLine, "exit") != 0))
- {
- command = strtok(currLine, " ");
- argument = strtok( NULL, "");
- EXEC(command, argument);
- currLine = myPrompt;
- }
- return 0;
- }
- char ** parseCMD( char * buff )
- {
- int i = 0, n = strlen(buff), j, count = 0;
- char ** CMDargs = (char **) malloc( sizeof( char ) * 100 * 100);
- if( buff == NULL )
- return NULL;
- for(i; i < n; i ++)
- {
- j = 0;
- char * aux = (char *) malloc( sizeof( char ) * 100);
- while( buff[i] != ' ' || buff[i] != '\t' || buff[i] != '\n')
- aux[j++] = buff[i++];
- aux[j] = '\0';
- CMDargs[count] = strdup( aux );
- count++;
- //printf("Argument %d is: %s", count - 1, CMDargs[count - 1]);
- free(aux);
- }
- CMDargs[ count ] = NULL;
- return CMDargs;
- }
- void EXEC(char *command, char *argBuffer)
- {
- pid_t pid;
- int status, fd[2], n;
- char s[255];
- char ** Args;
- pipe( fd );
- Args = parseCMD( argBuffer );
- if ((pid = fork()) < 0)
- {
- printf("ERROR: forking child process failed\n");
- exit(1);
- }
- else if (pid == 0)
- {
- close(fd[0]);
- dup2(fd[1],1);
- if (execvp(command, Args) < 0)
- {
- printf("ERROR: execvp call failed\n");
- exit(1);
- }
- close(fd[1]);
- }
- else
- {
- close(fd[1]);
- while( ( n = read( fd[0], s, 255 ) ) > 0 )
- {
- s[n] = '\0';
- printf("%s",s);
- }
- while (wait(&status) != pid);
- close(fd[0]);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement