【发布时间】:2020-12-01 21:19:08
【问题描述】:
我正在用 C 语言构建一个服务器,它不仅可以监听传入的连接,还可以为我提供一个交互式 shell。基本上,我有这样的东西来接受客户......
while (1) {
accept_client(serverfd);
}
还有这样的东西用于创建交互式外壳
while (1) {
printf("shell> ");
fgets(command, sizeof(command) - 1, stdin);
server_do(command);
}
我想并行运行两个循环,交互式 shell 可以实时访问来自服务器的变量。我尝试使用fork,效果很好,但总体而言并不成功,因为 fork 只会创建子进程的副本,并且当新连接发生时,任何变量都无法更新。我还尝试使用pipe 来传输数据——但这有点像一场灾难(尽管我可能做错了)。最后我尝试使用pthread,但没有看到任何明显的方法可以使两者并行运行而不会阻塞。
执行此操作的“正确”方法是什么?我做了相当多的研究,并没有偶然发现一个明显的答案。
【问题讨论】:
-
与计算中的许多事情一样,没有单一的“正确”方式,因此您的问题不是很容易回答。使用线程当然是一种的方法。如果您需要特定解决方案的帮助,请将该代码显示为 minimal verifiable example 并说明您遇到的问题。否则,您目前所说的问题对于 Stack Overflow 来说太宽泛了。
标签: c multithreading sockets pipe fork