В C вы обрабатываете аргументы командной строки, когда main
принимает два аргумента,
int main(int argc, char** argv)
, где argc
- количество аргументов командной строки (включая саму программу) и argv
является указателем на область памяти, где расположены argc-1
указатели на строки с фактическими аргументами.Пример:
int main(int argc, char** argv)
{
printf("The program was executed as %s.\n", argv[0]);
printf("The arguments were:\n");
for (int i = 1; i < argc; i++)
printf("%s\n", argv[i]);
return 0;
}
Давайте теперь предположим, что ваша программа принимает один аргумент командной строки, целое число, указывающее, сколько потоков порождено.Целое число задается в виде строки, поэтому мы должны преобразовать его, используя atoi
:
if (argc != 2)
{
printf("Need exactly one argument!\n");
return 1;
}
int num_threads = atoi(argv[1]); // Convert first argument to integer.
if (num_threads < 1)
{
printf("I'll spawn no less than 1 thread!\n");
return 2;
}
Теперь вы просто создаете массив дескрипторов потоков,
pthread_t* threads = malloc(num_threads*sizeof(pthread_t));
и использовать его для хранения дескрипторов потоков при запуске num_threads
количества потоков с использованием pthread_create
.
Если вы совсем не знакомы с pthreads, я рекомендую это краткое руководство .