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

时间:2017-10-31 06:28:23

标签: c++ io low-level-io

我从用户那里获取输入,然后使用read()和write()系统调用将其打印到标准输出。出于某种原因,除了常规输出之外,它还会打印一些额外的字符。附加字符来自用户输入,因此它们不是随机的。但是,我假设这可能是因为缓冲区未被清除以接收新输入。我搜索了许多在这种情况下适当的不同的东西,但我仍然感到困惑。我只使用低级I / O,因此不会实现C标准库。我问过的大多数人都说使用“fflush”,但我认为这只适用于我不会使用的stdio.h库。 提前感谢有关此事的任何建议或资源。

2 个答案:

答案 0 :(得分:1)

  

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

你没有。这是一个系统调用。您没有要刷新的任何应用程序端缓冲区。

  

我从用户那里获取输入,然后使用read()write()系统调用将其打印到标准输出。出于某种原因,除常规输出外,它还会打印一些额外的字符。

您的代码中存在错误。它应该是这样的:

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

十分之一,你有write的第三个参数错误。

  

我问过的大多数人都说使用“fflush”,但我认为这只适用于我不会使用的stdio.h库。

他们错了你是对的。

答案 1 :(得分:-1)

尝试此功能:

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

所以只要你读()某事就应该调用这个函数来擦除缓冲区