文件读取和写入-是否可以连续而又连续地对缓冲区的I / O进行输入而无需调用文件“导航”功能?

我希望有> = 2个线程(但暂时只说我们有2个),它们从与每个线程相对应的单独文件读取到缓冲区中,然后交替将缓冲区写入同一文件中。

通常,这样做的方式是:让线程A读取文件A,记住它离开的字节位置,写到sameFile.txt,记住它离开的地方,然后让线程B读取文件B,记住它离开的字节位置,然后从A离开的位置继续,写入sameFile.txt。

但是,我问是否可以利用C ++文件流操作的某些“继承性质”并可靠地执行上述任务,而无需调用seekg,seekp之类的“导航”功能?

我有这个主意,因为如果我这样做

在单个线程中:

while(usr_input != true)
{
    read_file_in_thread(file,buf,BUF_SIZE);
}

其中“ read_file_in_thread”的完成方式为:(仅显示摘录以节省时间,很抱歉)

read_file_in_thread(ifstream file_to_read,char * buf,int size_of_buf){
    ...
int pos = 0;
while(!file_to_read.eof())
{
    file_to_read >> buf[pos++];
    if(pos>=BUF_SIZE) break;
}
}

文件写入操作几乎与(再次,摘录,我很抱歉)

file_to_write<<buf[pos++];

如果我用一个1线程执行上述操作,我注意到读取和写入都是连续进行的,则无需我提供有关任何文件操作的最后位置的任何信息,就好像系统记得一样。我想在幕后,C ++有意/无意地通过使用指针执行几乎所有操作来处理很多事情,而它们却不会经常被重置?

就像我说过的那样,使用单线程完成文件定位操作是“自动”完成的,但没有可靠的方法,因为在某些时候,读取操作从头开始,然后从最后的位置继续,也就是说像是0、1、2、3,然后是0、4、5、6 ...

当它由2个线程完成时,这种“自动定位”行为将完全消失,因为两个线程的读数分别为0、0、0、0。我的猜测(并且不要让我的猜测误导您)是,当另一种线程发出声音时,某些东西会重置吗?

所以最终我的两个问题是:

1,为什么当一个线程进行操作时,会发生这种“自动定位”的事情?

2,这种“自动定位”是否可以在2个或更多线程上可靠地执行,而无需使用诸如seekg,seekp之类的功能来故意找出特定的文件位置?可能吗?

我了解我的代码和问题描述可能并不完整,但我希望传达一个总体思路。解决此问题时,您可以随意添加更多的函数和变量以及许多其他功能,但不鼓励这样做,建议您使用问题中给出的内容进行处理。

kubikiri 回答:文件读取和写入-是否可以连续而又连续地对缓冲区的I / O进行输入而无需调用文件“导航”功能?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3141029.html

大家都在问