Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <wait.h>
  4. #include <stdlib.h>
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8. pid_t *arr_pid = calloc(argc - 1, sizeof(*arr_pid));
  9. int st;
  10. for (int i = 1; i < argc; i++) {
  11. pid_t pid = fork();
  12. if (pid == 0) {
  13. long long num;
  14. sscanf(argv[i], "%lld", &num);
  15. unsigned long long res = 0;
  16. if (num < 0) {
  17. res = num * -1;
  18. } else {
  19. res = num;
  20. }
  21. int result = 0;
  22. while (res != 0) {
  23. result += (res % 4);
  24. res /= 4;
  25. }
  26. _exit(result);
  27. }
  28. arr_pid[i-1] = pid;
  29. }
  30. pid_t cur_pid;
  31. int *arr = calloc(argc - 1, sizeof(*arr));
  32. while ((cur_pid = wait(&st)) != -1) {
  33. for (int i = 0; i < argc - 1; i++) {
  34. if (cur_pid == arr_pid[i]) {
  35. arr[i] = WEXITSTATUS(st);
  36. }
  37. }
  38. }
  39. for (int i = 0; i < argc-1; i++) {
  40. printf("%d\n", arr[i]);
  41. }
  42. free(arr);
  43. free(arr_pid);
  44. exit(0);
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement