Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么';t pubstebuf(0,0)使我的流无缓冲? 我一直试图理解C++中的缓冲(对于我编写的串行I/O程序来说,这是非常令人困惑的)。我最初没有刷新我的输出命令(由于无知),所以我在这里查找(),它说在任何I/O操作发生之前通过my_fstream.rdbuf()->pubsetbuf(0,0)完成。这似乎改善了我的表现,但并没有完全解决它。。。我一直在寻找答案,发现了以下两个问题:,都说使用my_fstream.setf(std::ios::unitbuf)取而代之。这样做效果更好,但这两个答案都没有解释为什么它比my_fstream.rdbuf()->pubstebuf(0,0)更好_C++_Stream_Buffer - Fatal编程技术网

为什么';t pubstebuf(0,0)使我的流无缓冲? 我一直试图理解C++中的缓冲(对于我编写的串行I/O程序来说,这是非常令人困惑的)。我最初没有刷新我的输出命令(由于无知),所以我在这里查找(),它说在任何I/O操作发生之前通过my_fstream.rdbuf()->pubsetbuf(0,0)完成。这似乎改善了我的表现,但并没有完全解决它。。。我一直在寻找答案,发现了以下两个问题:,都说使用my_fstream.setf(std::ios::unitbuf)取而代之。这样做效果更好,但这两个答案都没有解释为什么它比my_fstream.rdbuf()->pubstebuf(0,0)更好

为什么';t pubstebuf(0,0)使我的流无缓冲? 我一直试图理解C++中的缓冲(对于我编写的串行I/O程序来说,这是非常令人困惑的)。我最初没有刷新我的输出命令(由于无知),所以我在这里查找(),它说在任何I/O操作发生之前通过my_fstream.rdbuf()->pubsetbuf(0,0)完成。这似乎改善了我的表现,但并没有完全解决它。。。我一直在寻找答案,发现了以下两个问题:,都说使用my_fstream.setf(std::ios::unitbuf)取而代之。这样做效果更好,但这两个答案都没有解释为什么它比my_fstream.rdbuf()->pubstebuf(0,0)更好,c++,stream,buffer,C++,Stream,Buffer,他们不应该做同样的事情吗?有人能给我解释一下区别吗 下面是我正在测试的代码(当设备接收到“开始”输入时,通过发送“就绪”\r\n“返回”来回复该输入): unitbuf desn不禁用缓冲,它只会在每次输出后刷新流operation@Ron,我注意到pubsetbuf(0,0)确实有一些效果。我不能很准确地描述它是什么。但在我的实际应用中,注释它会产生不同的行为。@john有趣,我不知道。这不意味着没有缓冲区吗?为什么要将已刷新的字符存储在缓冲区中?虽然我更感兴趣的是理解为什么在没有缓冲区存储信

他们不应该做同样的事情吗?有人能给我解释一下区别吗

下面是我正在测试的代码(当设备接收到“开始”输入时,通过发送“就绪”\r\n“返回”来回复该输入):


unitbuf desn不禁用缓冲,它只会在每次输出后刷新流operation@Ron,我注意到pubsetbuf(0,0)确实有一些效果。我不能很准确地描述它是什么。但在我的实际应用中,注释它会产生不同的行为。@john有趣,我不知道。这不意味着没有缓冲区吗?为什么要将已刷新的字符存储在缓冲区中?虽然我更感兴趣的是理解为什么在没有缓冲区存储信息的情况下,pubsetbuf(0,0)在每次输出操作后都不刷新。@polortiz40“为什么在没有缓冲区存储信息的情况下,pubsetbuf(0,0)在每次输出操作后都不刷新”-应该是,根据:如果S是空指针,N为零,则FILUBUF变得不缓冲输出,这意味着pBASE()和PPTR()是空的,任何输出都立即被发送到文件。“不是所有的东西都在C++的控制之下。只是因为C++没有缓冲区,并不意味着OS或运行时不。我猜这里的解释是在PubSuffBuf(0,0)中。情况下没有C++缓冲区,因此没有刷新,但是仍然存在一些系统缓冲区,因此您不能立即看到输出。但是在UNITBUF中,有刷新,并且刷新影响任何系统缓冲区。如果正确,这将是一种难以实现的实现。您需要深入到代码中寻找一个明确的答案。
int main(){
    std::fstream my_file;
    my_file.rdbuf()->pubsetbuf(0, 0);
    // my_file.setf(std::ios::unitbuf);  // Uncomment this line for testing both cases
    my_file.open("/dev/cu.usbmodem14201");
    my_file << "Start";
    std::this_thread::sleep_for(std::chrono::seconds(10));
}
with open("/dev/cu.usbmodem14201", "rb") as f:
    for line in f:
        print(line)