Я пытаюсь сделать свой собственный простой интерпретатор командной строки (shell), и я хочу, чтобы приглашение повторялось, если только пользовательский ввод является пробелом. По сути, если пользователь нажимает на возврат, я бы хотел, чтобы запрос повторил и дождался следующего ввода. Я использую fgets для ввода ввода и сохраняю его в char * commandBuffer для анализа методом parse(). Первоначально я думал проверить, существуют ли аргументы в argv (argc = 0), но это только приводит к тому, что курсор переместится на новую строку, не распечатывая подсказку еще раз. Если я буду вводить «\ n \ n \ ncd» в приглашении, например, cd все еще функционирует. Еще одна проблема, которую я хотел бы исправить, заключается в том, что для отправки того, что было напечатано в приглашении оболочки, пользователь должен нажать дважды. Вот мой код до сих пор:Как переиздать приглашение оболочки, если вводится только ввод пользователя?
for (;;) {
printf("p2: ");
fflush(stdout);
/*---------FGETS PROMPT----------*/
fgets(commandLine, STORAGE, stdin);
ln = strlen(commandLine)-1;
/* Removes trailing newline */
if(commandLine[ln] == '\n')
commandLine[ln] = '\0';
/* ATTEMPT to repeat the prompt if only user input at prompt is enter*/
if(commandLine[0] == '\0')
continue;
....More shell code....
Я тоже пытался реализовать свою консоль. Возможно, вы захотите попробовать 'libreadline' http://cnswww.cns.cwru.edu/php/chet/readline/rltop.html Это сделает вашу жизнь намного проще. –
Попробуйте проверить 'ln == 0' в вашем блоке if вместо проверки' commandLine [0] == '\ 0'' –
@ronmrdechai: Это очень незначительная оптимизация и не приведет к каким-либо изменениям в функциональности. – anishsane