Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.81 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/wait.h>
  5. #include <stdlib.h>
  6. #include <signal.h>
  7. #include <string.h>
  8.  
  9. char **parse_cmdline(const char *cmdline);
  10.  
  11. int main()
  12. {
  13. char *buffer;
  14. const char *res_buffer;
  15.  
  16. size_t bufsize = 30;
  17.  
  18. getline(&buffer,&bufsize,stdin);
  19.  
  20. res_buffer = buffer;
  21.  
  22. char **result = parse_cmdline(res_buffer);
  23.  
  24.  
  25. /*printf("\nelement [%d] -> %s",0,result[0]);
  26. printf("\nelement [%d] -> %s",1,result[1]);
  27. printf("\nelement [%d] -> %s",2,result[2]);
  28. */
  29. pid_t pid;
  30.  
  31. pid = fork();
  32. if(pid < 0) perror("fork");
  33. else if(pid == 0)
  34. {
  35. int res = execv(result[0],result);
  36. if(res == -1)
  37. {
  38. //strcat(error,argv[2])
  39. perror("error");
  40.  
  41. }
  42. }
  43. else
  44. {
  45. waitpid(pid,0,0);
  46. }
  47. exit(pid);
  48.  
  49. free(result);
  50.  
  51. return 0;
  52. }
  53.  
  54. char **parse_cmdline(const char *cmdline)
  55. {
  56. int max_size_arrays = 1;
  57.  
  58. char **array = (char**)malloc(max_size_arrays+1*sizeof(char*));
  59.  
  60. int i=0,j=0,n=1;
  61.  
  62. for(int t=0;cmdline[t]!='\0';t++,i++)
  63. {
  64. if(i >= max_size_arrays)
  65. {
  66. //printf("\n%s",array[i-1]);
  67. array = (char **)realloc(array, ++max_size_arrays);
  68.  
  69. // printf("\nBAI GOSHO! max_size_arrays = %d",max_size_arrays);
  70.  
  71. }
  72. // printf("\nn = %d",n);
  73. array[i] = (char*)malloc(n*sizeof(char));
  74.  
  75. while(cmdline[t]!=' ')
  76. {
  77. if(cmdline[t] == '\n')break;
  78. if(j >= n)
  79. {
  80. array[i] = (char*)realloc(array[i],++n);
  81. // printf("\nBAI PESHOO! n = %d",n);
  82. }
  83.  
  84. array[i][j] = cmdline[t];
  85. j++;
  86. t++;
  87. }
  88. n=1;
  89. j=0;
  90. }
  91. //printf("\nbuffer = %ld",strlen(cmdline));
  92.  
  93. array = (char **)realloc(array, ++max_size_arrays);
  94. array[i] = NULL;
  95. return array;
  96. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement