我正在编写一个功能非常类似于聊天室的 TCP 服务器并遇到了这个问题。
当用户连接时,会创建一个子进程来为用户服务。
当用户登录时,我将他的用户名存储到一个文本文件中,online.txt
但是当用户注销时,我需要从(问题)中删除用户,然后是online.txt
父级并杀死孩子。signals
reaper()
我的问题是:
Q1:我如何向收割者提供额外的信息(例如用户用于登录的用户名),以便它也可以将用户从中删除online.txt
?或者还有其他更好的方法吗?
Q2:sig
inreaper()
的价值从何而来?我可以向收割者添加其他参数吗?
Q3:我可以使用孩子的 pid 作为 login.txt 的某种主键吗?如果是这样,我如何reaper()
在父母调用的过程中检索孩子的 pid?
收割者看起来像这样:
void reaper(int sig)//where does sig come from?
{
int status;
while (waitpid(-1, &status, WNOHANG) >= 0)
;
}
父级使用的信号如下所示:
(void) signal(SIGCHLD, reaper);//how can I add more parameters?
提前谢谢你,我希望一次问3个问题不会太贪心。
对任何问题的任何见解都将不胜感激。