我从用户那里获取输入,然后使用 read() 和 write() 系统调用将其打印到标准输出。出于某种原因,除了常规输出之外,它还会打印一些额外的字符。附加字符来自用户输入,因此它们不是随机的。但是,我假设这可能是由于缓冲区未清除以接收新输入的事实。我搜索了许多适合这种情况的不同事物,但我仍然感到困惑。我只为此使用低级 I/O,因此不会实现 C 标准库。我问过的大多数人都说使用“fflush”,但我认为这仅适用于我不会使用的 stdio.h 库。提前感谢您提供有关此事的任何建议或资源。
问问题
2987 次
2 回答
2
你如何“刷新” write() 系统调用?
你没有。这是一个系统调用。您没有任何要刷新的应用程序端缓冲区。
我从用户那里获取输入,然后使用
read()
和write()
系统调用将其打印到标准输出。出于某种原因,除了常规输出之外,它还会打印一些额外的字符。
您的代码中有错误。它应该如下所示:
int count;
while ((count = read(inFD, buffer, sizeof buffer)) > 0)
{
write(outFD, buffer, count);
}
十比一你有第三个参数write
不对。
我问过的大多数人都说使用“fflush”,但我认为这仅适用于我不会使用的 stdio.h 库。
他们错了,你是对的。
于 2017-10-31T06:44:29.330 回答
-1
试试这个功能:
eraseFunction()
{
std::cin.clear();
std::cin.ignore(std::cin.rdbuf()->in_avail());
}
所以一旦你 read() 你应该调用这个函数来擦除缓冲区
于 2017-10-31T06:34:54.383 回答