Advertisement
Guest User

Untitled

a guest
Oct 16th, 2019
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<string.h>
  4. #include<unistd.h>
  5. #include<sys/types.h>
  6. #include<sys/wait.h>
  7. #include<signal.h>
  8. #define MAX 500 //Max Input
  9. #define ARGS 20 //Max number of arguments
  10. //handle the signal SIGCHLD when a child process is terminated
  11. void signalHandler(int sig_num)
  12. {
  13. FILE *fp;
  14. fp=fopen("shell_logfile.log","a+");// Open log file
  15. if(fp == NULL)
  16. {
  17. printf("\nerror:couldn't open file");
  18. }
  19. else fprintf(fp,"Child process was terminated\n");
  20. fclose(fp);
  21.  
  22. }
  23. void ExecuteBackground(char *parsedArguments){
  24. pid_t pid = fork();
  25. if(pid<0){
  26. printf("Forking Error");
  27. }
  28. else{
  29. if(pid==0){
  30. execvp(parsedArguments[0],parsedArguments);
  31. return;
  32. }
  33. else{
  34. return;
  35. }
  36. }
  37. }
  38.  
  39.  
  40. int Parse(char line[], char *parsedArguments[]) //Parsing
  41. {
  42. int i=0;
  43. if((parsedArguments[i] = strtok(line," "))==NULL){
  44. printf("Please enter Command ");
  45. return 0;
  46. }
  47. int counter=1;
  48. while((parsedArguments[counter] = strtok(NULL, " ")) != NULL){ //Parse Using Spaces
  49. i++;
  50. }
  51. parsedArguments[i]= '\0';
  52. return i;
  53. }
  54. int ExecuteProcess(char *parsedArguments[]){
  55. pid_t pid = fork();
  56. if(pid==-1){
  57. printf("\nFailed Fork");
  58. return ;
  59. }
  60. else if(pid==0) {
  61. if(execvp(parsedArguments[0],parsedArguments)<0){
  62. printf("Could not Execute Command");
  63. }
  64. exit(0);
  65. }
  66. else{
  67. wait(NULL);
  68. }
  69. }
  70. int main()
  71. {
  72. char line[MAX]; // User Input
  73. char *parsedArguemnt[ARGS]; // Arguments in Command (tokens)
  74. int tokenCount=0;
  75. int status;
  76. int flag=1;
  77. printf("Simple Shell");
  78. while(1)
  79. {
  80. printf("\n>>");
  81. fgets(line, MAX, stdin);//Read Input from User
  82. tokenCount=Parse(line,parsedArguemnt);//Parsing Input
  83. if(strcmp(parsedArguemnt[0],"exit") == 0){ //Exit Function
  84. exit(0);
  85. }
  86. if(flag==1){
  87. ExecuteProcess(parsedArguemnt);
  88. }
  89. else{
  90. ExecuteBackground(parsedArguemnt);
  91. }
  92. }
  93.  
  94. return 0;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement