Я совершенно новичок в C... ну вроде как. я вроде знаю с++. Я пытаюсь запустить многопоточную программу для своего задания, и одно из требований состояло в том, чтобы пользователь вводил свои команды в командной строке. По сути, я спрашиваю, как я могу настроить int main, чтобы он мог постоянно принимать входные данные из командной строки (чтобы я мог запускать новые потоки) без остановки, и как делать сравнения, например, если пользователь нажимает «E ' сделайте это, если он нажмет F, сделайте то и так далее. Я предполагаю, что argc вообще не имеет значения, потому что я не знаю, сколько команд собирается ввести пользователь. Что было бы лучшим способом продолжить об этом
C принимает аргументы из командной строки в качестве условий
Ответы (4)
Пользовательский интерфейс-поток:
void *trd_func(void *p) {
while (1) {
int c = getchar();
switch(c) {
case 'E':
set_some_flag('E');
break;
default: break;
}
}
return 0;
}
Когда программа запускается, аргументы командной строки передаются в int main(int argc, char **argv)
и не изменяются (если только программа их не изменяет).
После этого программа может читать из стандартного ввода, чтобы получить такие команды, как E
для «сделать это» и F
для «сделать то». Если вы не предпримете шаги для конкретной платформы, чтобы заставить ее вести себя иначе, входные данные не будут предоставлены вашей программе до тех пор, пока пользователь не нажмет return после ввода команды.
Таким образом, вы можете обрабатывать аргументы командной строки, если они предоставлены. Сделав это, вы можете перейти в интерактивный режим и дождаться дальнейших действий пользователя.
Многопоточность имеет к этому очень мало отношения. Вам, вероятно, понадобится один поток для чтения от пользователя (иначе кто-то или что-то запутается), но в остальном связь между потоками — это совершенно отдельная проблема.
Пусть главный поток отвечает за ввод-вывод.
Распечатайте приглашение пользователю для ввода из главного потока.
Передайте пользовательский ввод из главного потока в рабочие потоки.
Повторение.
Если вы действительно хотите учиться, делая то, что хотите,
вам следует начать искать информацию о файловых потоках и о вводе ttys/canonical.
И когда вы поймете, как это работает, вы сможете использовать функцию read() и делать все, что хотите, для взаимодействия с пользователем (даже использовать оболочку).
Я могу гарантировать вам, что вы узнали много интересного о файловых потоках ввода/вывода.
Но, как упоминалось ранее, вы также можете использовать getchar().