Я использую дочерний процесс UDP, и я хочу отправить вывод команды, данной процессом отца, клиенту (клиент подключен к отцу с помощью TCP). То, что я сделал, показано ниже, но работает не так, как я хочу. Мне нужно отправить вывод в виде сообщений длиной не более 512 байт (то есть, если сообщение составляет 600 байт, оно должно отправить 512 + 88 байт). Клиент также должен выйти, когда получит сообщения, но в моем случае это не будет завершено. Я пытался использовать dup2, как я видел на примерах, но он не работает по UDP, так как соединение не установлено
//child process
FILE *fp;
fp = popen(s, "r"); //s = "ls"
while (fgets(buffer, sizeof(buffer), fp)) {
sendto(sockfd, buffer, strlen(buffer)+1, MSG_CONFIRM, (const struct sockaddr *)&servaddr, sizeof(servaddr));
}
pclose(fp);
n = recvfrom(sockfd, (char *)buffer, 512, MSG_WAITALL, (struct sockaddr *)&servaddr, &len);
printf("Client : %s\n", buffer);
close(sockfd);
//client process
int len;
len = sizeof(cliaddr);
while(recvfrom(sockfd, (char *)buffer, MAXLINE, MSG_WAITALL, ( struct sockaddr *)&cliaddr, &len)){
printf("%s", buffer);
}
sendto(sockfd, (const char *)hello, strlen(hello), MSG_CONFIRM, (const struct sockaddr *) &cliaddr, len);
printf("Hello message sent.\n");
return 0;