繁体   English   中英

您如何“刷新” write()系统调用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM