Dan*_*ira 8 c linux bash multithreading
我正在为大学开展一个项目,我只能使用命名管道(mkfifo())来建立服务器和终端之间的通信(两者都由我创建).
有:
实际上我的应用程序是这样的:
问题:
如果我只使用一个线程启动服务器,这一切都正常,因为响应(reply_t)按命令到达的顺序发送(command_t)
但是,如果我使用多个线程启动服务器,我无法保证响应以命令到达的相同顺序发送,这将使我得到混合响应(类似于,我将在终端1上收到结果从终端2等命令执行...).
在这个解决方案中,我将为连接到服务器的每个终端输出PIPE,而不是在所有终端之间共享一个输出PIPE.但是如何在C中实现可变数量的终端?我甚至无法检测新终端何时打开输入PIPE.
有什么建议?谢谢!
小智 1
丹尼尔,
我之前实现了一个类似的服务器,您可以监听终端,当终端完成消息时,您可以分叉进程并将响应发送回子进程,而在循环中的父进程中,您可以为下一个进程创建另一个监听器终端,正如 ccarton 所说:
像这样的东西:
while (1)
{
newsockfd = accept(sockfd,
(struct sockaddr *) &cli_addr, &clilen);
if (newsockfd < 0)
error("ERROR on accept");
pid = fork();
if (pid < 0)
error("ERROR on fork");
if (pid == 0)
{
close(sockfd);
dostuff(newsockfd);
exit(0);
}
else
close(newsockfd);
} /* end of while */
Run Code Online (Sandbox Code Playgroud)
您可以在这里找到完整的解释: http: //www.linuxhowtos.org/C_C++/socket.htm
在“服务器代码的增强”部分下。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
765 次 |
| 最近记录: |