※ ChatGPTを利用し、要約された質問です(原文:kill.c)
Cプログラムkill.cのsend_signals関数の条件についての疑問
2012/08/10 13:56
このQ&Aのポイント
Cプログラムkill.cのsend_signals関数の条件について疑問があります。
send_signals関数内部での条件pid != nの意味が分からないです。
この条件が存在する理由について教えていただきたいです。
以下のCプログラムはcoreutilsパッケージのkill.cの関数send_signalsです.
static int
send_signals (int signum, char *const *argv)
{
int status = EXIT_SUCCESS;
char const *arg = *argv;
do
{
char *endp;
intmax_t n = (errno = 0, strtoimax (arg, &endp, 10));
pid_t pid = n;
if (errno == ERANGE || pid != n || arg == endp || *endp)
{
error (0, 0, _("%s: invalid process id"), arg);
status = EXIT_FAILURE;
}
else if (kill (pid, signum) != 0)
{
error (0, errno, "%s", arg);
status = EXIT_FAILURE;
}
}
while ((arg = *++argv));
return status;
}
分からないのは
pid_t pid = n;
の後に
pid != n
の条件があることです。
必ず、成り立たないと思うのですが、なぜ存在するのでしょうか?
分かる方、ご回答お願いします。
質問の原文を閉じる
質問の原文を表示する
お礼
ご回答ありがとうございます。 おかげで以下のことが分かりました。 intmax_t -> long int pid_t -> int ユーザ入力が尋常になくでかいときは errno == ERANGE で、 intmax_tには収まるがpid_tにおさまらないときに、 pid != n でエラーにするということでしょう。