私はチャットルームのように機能するTCPサーバーを作成していて、この質問に出くわしました。
ユーザーが接続すると、ユーザーにサービスを提供するための子プロセスが作成されます。
ユーザーがログインすると、ユーザー名をテキストファイルに保存しますがonline.txt
、ユーザーがログアウトすると、online.txt
(問題)からユーザーを削除する必要があります。次にsignals
、親が子reaper()
を殺します。
私の質問は次のとおりです。
Q1:リーパーに追加情報(ユーザーがログインに使用したユーザー名など)を絞り込んで、ユーザーをリーパーから削除する方法を教えてonline.txt
ください。それとも、そうするための別のより良い方法がありますか?
sig
Q2: inはどこreaper()
からその価値を得るのですか?刈り取り機にパラメータを追加できますか?
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つの質問をするのはあまり貪欲ではないことを願っています。
質問のいずれかに関する洞察は大歓迎です。