Я беру ввод от пользователя и затем печатаю его в стандартный вывод, используя системные вызовы read () и write (). По какой-то причине он печатает несколько дополнительных символов в дополнение к обычному выводу. Дополнительные символы взяты из пользовательского ввода, поэтому они не случайны. Тем не менее, я предполагаю, что это может быть связано с тем, что буфер не очищен для ввода нового ввода. Я искал много разных вещей, которые были бы уместны в этом сценарии, но я все еще запутался. Для этого я использую только низкоуровневый ввод-вывод, поэтому стандартные библиотеки C не будут реализованы. Большинство людей, которых я спросил, сказали, что используют «fflush», но я подумал, что это будет применимо только к библиотеке stdio.h, которую я не буду использовать.
Заранее спасибо за любые советы или ресурсы по этому вопросу.
Как вы «очищаете» системный вызов write ()?
Вы не Это системный вызов. У вас нет буфера на стороне приложения для очистки.
Я беру ввод от пользователя, а затем распечатываю его на стандартный вывод, используя
read()
а такжеwrite()
системные вызовы. По какой-то причине он печатает несколько дополнительных символов в дополнение к обычному выводу.
У вас есть ошибка в вашем коде. Это должно выглядеть так:
int count;
while ((count = read(inFD, buffer, sizeof buffer)) > 0)
{
write(outFD, buffer, count);
}
Десять к одному у вас есть третий параметр write
неправильно.
Большинство людей, которых я спросил, сказали, что используют «fflush», но я подумал, что это будет применимо только к библиотеке stdio.h, которую я не буду использовать.
Они не правы, а вы правы.
попробуйте эту функцию:
eraseFunction()
{
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
}
поэтому, как только вы прочитаете () что-то, вы должны вызвать эту функцию, чтобы стереть буфер