Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 拆分服务器进程的最佳方法_C_Multithreading_Sockets_Pipe_Fork - Fatal编程技术网

C 拆分服务器进程的最佳方法

C 拆分服务器进程的最佳方法,c,multithreading,sockets,pipe,fork,C,Multithreading,Sockets,Pipe,Fork,我正在用C构建一个服务器,它不仅侦听传入的连接,而且还为我提供了一个交互式shell。基本上,我有这样的东西来接受客户 while(1){ 接受_客户端(serverfd); } 类似这样的东西用于创建交互式shell while(1){ printf(“shell>”); fgets(命令,sizeof(命令)-1,标准输入); 服务器(命令); } 我希望并行运行这两个循环,交互式shell用于实时访问服务器上的变量。我尝试使用,效果很好,但总体上没有成功,因为fork只创建子进程的一个

我正在用C构建一个服务器,它不仅侦听传入的连接,而且还为我提供了一个交互式shell。基本上,我有这样的东西来接受客户

while(1){
接受_客户端(serverfd);
}
类似这样的东西用于创建交互式shell

while(1){
printf(“shell>”);
fgets(命令,sizeof(命令)-1,标准输入);
服务器(命令);
}
我希望并行运行这两个循环,交互式shell用于实时访问服务器上的变量。我尝试使用,效果很好,但总体上没有成功,因为fork只创建子进程的一个副本,并且没有一个变量可以随着新连接的发生而更新。我还试着用a来传输数据,但那是一种灾难(尽管我可能做得不对)。最后,我尝试使用,但没有发现任何明显的方法可以使两者并行运行而不阻塞


“正确”的方法是什么?我做了大量的研究,还没有找到一个明显的答案。

你也可以把“stdin”当作“网络连接”,它们都是低级的“fd”

因此,您需要实现一个能够并行处理多个连接的服务器, 有很多方法可以做到这一点

下面是一篇很好的阅读()来解释和比较这些方法

我希望在您的情况下以异步方式实现。
我编写了一些包装器和示例(),使libevent更易于使用。“cat”示例演示了如何处理类似stdio的正常连接。你可能会感兴趣。:)

与计算中的许多事情一样,没有一种“正确”的方法,因此你的问题不太容易回答。使用线程当然是一种方法。如果您需要某个特定解决方案的帮助,请将该代码显示为一个示例,并解释您在使用该代码时遇到的问题。否则,您当前提出的问题对于堆栈溢出来说过于宽泛。