Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <unistd.h>
- #include <wait.h>
- #include <stdlib.h>
- int main(int argc, char *argv[])
- {
- pid_t *arr_pid = calloc(argc - 1, sizeof(*arr_pid));
- int st;
- for (int i = 1; i < argc; i++) {
- pid_t pid = fork();
- if (pid == 0) {
- long long num;
- sscanf(argv[i], "%lld", &num);
- unsigned long long res = 0;
- if (num < 0) {
- res = num * -1;
- } else {
- res = num;
- }
- int result = 0;
- while (res != 0) {
- result += (res % 4);
- res /= 4;
- }
- _exit(result);
- }
- arr_pid[i-1] = pid;
- }
- pid_t cur_pid;
- int *arr = calloc(argc - 1, sizeof(*arr));
- while ((cur_pid = wait(&st)) != -1) {
- for (int i = 0; i < argc - 1; i++) {
- if (cur_pid == arr_pid[i]) {
- arr[i] = WEXITSTATUS(st);
- }
- }
- }
- for (int i = 0; i < argc-1; i++) {
- printf("%d\n", arr[i]);
- }
- free(arr);
- free(arr_pid);
- exit(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement