クライアントから要求されたスレッド数を読み取ることになっています。したがって、誰かが私のプログラムを次のように実行した場合:
./test 2
2に等しいスレッドの数を読み取る必要があります。試しgetchar()
ましたが、機能しません。何か案が?
クライアントから要求されたスレッド数を読み取ることになっています。したがって、誰かが私のプログラムを次のように実行した場合:
./test 2
2に等しいスレッドの数を読み取る必要があります。試しgetchar()
ましたが、機能しません。何か案が?
以下は、完全で正しいエラー チェックと診断メッセージを含む最小限の例です。errno
範囲エラーを有効な出力と区別するために 0に設定する必要があることに注意してくださいstrtoul()
。これは関数の厄介な癖です。
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
int main(int argc, char *argv[])
{
if (argc != 2) {
fputs("usage: test NTHREAD\n", stderr);
exit(1);
}
char *e;
errno = 0;
unsigned long nthread = strtoul(argv[1], &e, 0);
if (!*argv[1] || *e) {
fputs("error: invalid NTHREAD\n", stderr);
exit(1);
}
if (nthread == (unsigned long) -1 && errno == ERANGE) {
fputs("error: NTHREAD out of range\n", stderr);
exit(1);
}
// Your code goes here
}
これはスレッド自体とは何の関係もありません。
プログラムの最初の引数は、指定されている場合は文字列として検出されるため、またはargv[1]
のような整数に変換する必要があります。atoi
strtol
int main(int argc, int **argv)
の引数を使用すると、最初の引数が現在実行中のファイルの名前であり、次の引数がプログラムに送信されるパラメーターであるmain
ことがわかります。argv[0]
あなたの場合、読む必要がありますargv[1]
。
argc
入力された引数をカウントするために常にチェックします。