Как вы «смываете» системный вызов write ()?

Я беру ввод от пользователя и затем печатаю его в стандартный вывод, используя системные вызовы read () и write (). По какой-то причине он печатает несколько дополнительных символов в дополнение к обычному выводу. Дополнительные символы взяты из пользовательского ввода, поэтому они не случайны. Тем не менее, я предполагаю, что это может быть связано с тем, что буфер не очищен для ввода нового ввода. Я искал много разных вещей, которые были бы уместны в этом сценарии, но я все еще запутался. Для этого я использую только низкоуровневый ввод-вывод, поэтому стандартные библиотеки C не будут реализованы. Большинство людей, которых я спросил, сказали, что используют «fflush», но я подумал, что это будет применимо только к библиотеке stdio.h, которую я не буду использовать.
Заранее спасибо за любые советы или ресурсы по этому вопросу.

0

Решение

Как вы «очищаете» системный вызов write ()?

Вы не Это системный вызов. У вас нет буфера на стороне приложения для очистки.

Я беру ввод от пользователя, а затем распечатываю его на стандартный вывод, используя read() а также write() системные вызовы. По какой-то причине он печатает несколько дополнительных символов в дополнение к обычному выводу.

У вас есть ошибка в вашем коде. Это должно выглядеть так:

int count;
while ((count = read(inFD, buffer, sizeof buffer)) > 0)
{
write(outFD, buffer, count);
}

Десять к одному у вас есть третий параметр write неправильно.

Большинство людей, которых я спросил, сказали, что используют «fflush», но я подумал, что это будет применимо только к библиотеке stdio.h, которую я не буду использовать.

Они не правы, а вы правы.

1

Другие решения

попробуйте эту функцию:

eraseFunction()
{
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
}

поэтому, как только вы прочитаете () что-то, вы должны вызвать эту функцию, чтобы стереть буфер

-1

По вопросам рекламы [email protected]