[英]How do you “flush” the write() system call?
我从用户处获取输入,然后使用read()和write()系统调用将其打印到标准输出。 由于某些原因,除了常规输出外,它还会打印一些额外的字符。 其他字符来自用户输入,因此它们不是随机的。 但是,我认为这可能是由于未清除缓冲区以接收新输入的事实。 我搜索了许多适用于这种情况的不同事物,但我仍然感到困惑。 我仅为此使用低级I / O,因此不会实现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());
}
因此,一旦您读取了()内容,就应该调用此函数以擦除缓冲区
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.