繁体   English   中英

覆盖随机访问文件

[英]Overwriting in a random access file

我有一个以“r + b”模式打开的随机访问文件,其长度相等。 我可以在阅读并改写记录后更改记录的内容吗?

我尝试了以下代码,但在运行时我得到:分段错误(核心转储)

#include<stdio.h>

int main()
{
   struct tala {
      int rec_no;
      long file_no;
   };
   FILE *file_locking;
   struct tala t,f;
   file_locking = fopen("/path/to/my/file.bin", "rb+");
   t.rec_no = 1;
   t.file_no = 3;
   if (fwrite(&t, sizeof(struct tala),1,file_locking)==0)
      printf("Error opening file");
   t.rec_no=0;
   rewind(file_locking);
   if (fwrite(&t, sizeof(struct tala),1,file_locking)==0)
      printf("Error opening file");
   rewind(file_locking);
   if (fread(&f, sizeof(struct tala),1,file_locking)==0)
      printf("Error opening file");
   printf("\n %d",f.rec_no);
   printf("\n %ld", f.file_no);
   fclose(file_locking);
}

是的你可以。 只记得总是fseek之间的读取和写入。

引用fopen手册页:

读取和写入可以以任何顺序混合在读/写流上。 请注意,ANSI C要求输出和输入之间的文件定位功能介入,除非输入操作遇到文件结尾。

额外提示: 始终检查fopen和相关函数的返回值,并处理错误(使用perrorstrerror打印出失败的内容)。

是。 唯一需要注意的是,在从输出切换到输入之前必须调用flush或文件定位功能,并且在从read到write切换之前调用文件定位功能或者在文件结尾处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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