Я пытаюсь создать простую программу-оболочку и, глядя на несколько примеров, увидел, что большинство людей используют getline () для получения ввода, однако я пытался использовать read () и заметил странную ошибку, которую яинтересно, видели ли другие люди или знали причину.
Когда я запускаю код с помощью getline, все работает нормально.После запуска программы я получаю имя терминала, и оно готово принять ввод.Когда я использую read, кажется, что после ввода ввода выполняется имя оболочки.Кажется, это происходит независимо от того, что я делаю.строка для отображения имени оболочки -
cout << "SweetShell-> ";
, а затем ПОСЛЕ этой строки я либо запускаю команду чтения, либо даже вызываю другой процесс, который затем запускает команду чтения, и в любом случае печатает «SweetShell->»происходит после ввода.
Еще более странно во время тестирования У меня был блок кода вроде:
cout << "SweetShell-> ";
int test = read(0,buf,MAX_ARGS);
//temp is a string that is set to the input
cout << temp << " " << test;
и вывод выглядел примерно так:
3SweetShell-> ls
значениеон напечатал пробелы, затем тест, затем первый cout и, наконец, temp.Кто-нибудь знает, что с этим происходит?