c - 在随机访问文件中覆盖



>我有一个以"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 打印出失败的内容)。

是的。 唯一需要注意的是,在从输出切换到输入之前,您必须调用刷新或文件定位函数,并在从读取切换到写入之前调用文件定位函数或位于文件末尾。

相关内容

  • 没有找到相关文章

最新更新