Я пишу TCP-сервер, который работает очень похоже на чат, и наткнулся на этот вопрос.
Когда пользователь подключается, создается дочерний процесс для обслуживания пользователя.
Когда пользователь входит в систему, я сохраняю его имя пользователя в текстовом файле, online.txt
Но когда пользователь выходит из системы, мне нужно удалить пользователя из online.txt
(ПРОБЛЕМА), затем родительский элемент signals
a reaper()
и убить ребенка.
Мои вопросы:
В1: Как я могу втиснуть дополнительную информацию жнецу (например, имя пользователя, которое пользователь использовал для входа), чтобы он также мог удалить пользователя из online.txt
? Или есть другой лучший способ сделать это?
Q2: откуда sig
в reaper()
получает свое значение? Могу ли я добавить дополнительные параметры к жатке?
В3: Могу ли я использовать pid ребенка как своего рода первичный ключ для login.txt? Если так, как я могу получить pid ребенка во время reaper()
, который вызывается родителем?
Жнец выглядит так:
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 вопроса не слишком жадно.
Мы будем очень признательны за понимание любых вопросов.