Нужно написать программу на Си использующую несколько процессов. При написании столкнулся с необычной проблемой. При вызове write(pipe[1], string, strlen(stirng)
в стандартный вывод подаётся содержимое строки. Сама программа выглядит вот так:
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <unistd.h>
#include <string.h>
int main(void)
{
int clientPipe[2];
int* size = malloc(sizeof(int));
char string[] = "Hello, world!\n";
pid_t childpid;
if ((childpid = fork()) == -1) {
perror("fork");
exit(1);
} else if (childpid == 0) {
/* Client */
close(clientPipe[0]);
/* scanf("%d", size);*/
/* printf("%d\n", *size);*/
/* write(clientPipe[1], size, sizeof(int)); */
write(clientPipe[1], string, sizeof(string));
printf("TROLOLO\n");
/* time_t rawtime;*/
/* srand(rawtime);*/
exit(0);
} else {
/* Server */
wait();
close(clientPipe[1]);
printf("Continue\n");
*size = read(clientPipe[0], string, sizeof(string));
printf("%s", string);
/* read(clientPipe[0], size, sizeof(int));*/
/* printf("%d\n", *size);*/
}
return(0);
}
Вывод при запуске следующий:
TROLOLO
Hello, world!
Continue
Hello, world!
}
Почему Hello, world! выводится дважды?
И, в дополнение, когда нужно вызывать wait()? До закрытия канала и считывания или после?
Ну и раз уж зашла речь о wait(), почему при компиляции (clang source.c
) я получаю следующий варнинг и как мне его не получать (гугл не помог):
hello.c:37:9: warning: implicit declaration of function 'wait' is invalid in C99
[-Wimplicit-function-declaration]
wait();