我是一名学习C / C ++的Unix套接字/网络编程项目的学生。我正在编写一个可以从多个客户端接收TCP消息的简单服务器。在this guide之后,我已将服务器写入accept()
传入的客户端连接,然后fork()
处理向每个客户端发送一些消息。到目前为止,一切都很简单。
现在,我需要获取在每个fork()
ed子进程中收集的数据,将其传递回执行accept()
的父进程,并允许父进程继续运行收集的数据并让每个孩子return 0;
。 (1个过程 - >许多过程收集数据 - > 1个过程包含所有数据)
我不知道最好的方法。我的课程教授网络,而不是管理Unix中的流程。子进程如何将数据发送回父进程?或者,他们能以某种方式在他们之间共享数据吗?或者,我是否完全以错误的方式接近这个?
答案 0 :(得分:2)
在分叉子服务器及其父服务器之间进行通信的常用方法是管道。这是一个例子:
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
int
main(int argc, char * argv[])
{
int pipefd[ 2];
pid_t cpid;
char buf;
pipe( pipefd); // create the pipe
cpid = fork(); // duplicate the current process
if (cpid == 0) // if I am the child then
{
close( pipefd[ 0]); // close the read-end of the pipe
write( pipefd[ 1], argv[0], strlen(argv[0])); // send name to the server
close( pipefd[ 1]); //close the write-end of the pipe,
//send EOF to the server
exit( EXIT_SUCCESS);
}
else // if I am the parent then
{
close( pipefd[ 1]); // close the write-end of the pipe
while ( read( pipefd[ 0], &buf, 1) > 0) // read while EOF
write( 1, &buf, 1);
write( 1, "\n", 1);
close( pipefd[0]); // close the read-end of the pipe
wait( NULL); // wait for the child process to exit before I do the same
exit( EXIT_SUCCESS);
}
return 0;
}
您还可以在localhost上使用共享内存或套接字。