gpt4 book ai didi

c - 当父进程发生某些事情时,父进程如何告诉子进程做某事?

转载 作者:行者123 更新时间:2023-11-30 17:57:14 25 4
gpt4 key购买 nike

我需要帮助来使父进程和子进程相互通信,同时充当 TCP 服务器程序的 fork() 部分。我们将 TCP 服务器的父级称为 A,将子级称为 B。A 从客户端接收数据,B 自动向该客户端发送数据。当A收到“hi”时,B应该说“hello”。问题是,pipe() 似乎不起作用,A 需要告诉 B 客户端已发送了需要回复的内容。我读过有关共享内存的内容,但它似乎对我的使用不实用。

请建议我如何实现这一点。我能够从 TCP 套接字的两端发送用户提示消息,但无法让客户端自动回复。

由于某些原因,我无法完全披露整个代码。以下是一些:

主要:

int fd[2];
char bufout[10];
char bufin[10];
if (pipe2(fd,O_NONBLOCK) < 0) puts("Warning: Pipes not Running");

int id = fork();
if (id == -1) {
perror("fork: ");
return 1;
}

父级:

printf("Client %s connected. \n",cli_ip);     
while(1){
memset(mesg,0,sizeof(mesg));
if( recvfrom(connfd,mesg,sizeof(mesg),0,(struct sockaddr *)&cliaddr,&len) > 0 ){

printf("From %s port %d: %s",cli_ip,ntohs(cliaddr.sin_port),mesg);
if (strncmp(mesg,"hi",4) == 0) {
printf("%s hi you\n",cli_ip);
close(fd[0]);
write(fd[1],"hi",sizeof("hi"));

}
}
else {
printf("Client %s disconnected. \n",cli_ip);
break;
}
}

child :

while (1){
close(fd[1]);
if (read(fd[0],bufin,sizeof(bufin))) sendto(sockfd,"hello\r",strlen("hello\r"),0,(const struct sockaddr *)&servaddr,len);

strcpy(bufin,"");

}

嗯,“管道未运行”消息不会显示,这是给定的。我觉得这是因为某些事情被阻碍了。

最佳答案

您可以在 C 中实现基于 UDP 的基本消息传递机制(确保它在单独的线程中运行)。那时,当A发生事情时,可以通过数据报通知B。 B 也是如此。

关于c - 当父进程发生某些事情时,父进程如何告诉子进程做某事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12957527/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com