我的应用程序(C 程序)打开同一文件的两个文件句柄(一个处于写入模式,一个处于读取模式)。应用程序中的两个单独的线程读取和写入文件。这很好用。 由于我的应用程序在 RAM 磁盘大小有限的嵌入式设备上运行,因此我希望在达到最大大小时写入
FileHandle
来换行到文件开头,并且读取 FileHandle
像循环缓冲区一样跟随。我从这个问题的答案中了解到这应该有效。但是,一旦我将 fseek
写入文件开头,FileHandle
就会返回错误。在执行 fread
到文件开头时,EOF
会重置吗?如果是这样,应该使用哪个函数将写入文件位置设置为 0,而不导致 fseek
重置。编辑/更新: 我尝试了几件事:
EOF
未经测试,但它提供了一个想法。写入还应该处理
// Write
if(ftell(WriteHandle)>BUFFER_MAX) rewind (WriteHandle);
fwrite(WriteHandle,/* ... */);
// Read (assuming binary)
readSize = fread (buffer,1,READ_CHUNK_SIZE,ReadHandle);
if(readSize!=READ_CHUNK_SIZE){
rewind (ReadHandle);
if(fread (buffer+readSize,1,READ_CHUNK_SIZE-readSize,ReadHandle)!=READ_CHUNK_SIZE-readSize)
;// ERROR !
}
不是模
BUFFER_MAX
的情况。此外,只有在确定数据已经写入时才可以读取。但我想你已经这么做了。
WRITE_CHUNK_SIZE
根据具体情况,权限也可能更严格。