【问题标题】:Read a struct from file从文件中读取结构
【发布时间】:2015-04-06 18:35:18
【问题描述】:

我正在尝试在一个文件中写入一个由 4 个无符号整数组成的结构,然后将其读回,但我什么也读不出来。

这是我的代码:

// create and write values in superblock
..
Superblock s; // the struct
if(write(file_desc , &superblock , sizeof(Superblock)) == -1) {
  perror("writing superblock");
  exit(1);
}
close(file_desc);
file_desc = open(path_file, O_WRONLY | O_CREAT, 0600);
while ( ( read( file_desc , &s , sizeof(Superblock))) > 0 ) {
  printf("%u %u %u %u\n", s.block_size, s.filename_size, s.max_file_size,
         s.max_dir_file_no);
}

它甚至不会进入循环。我错过了什么?

【问题讨论】:

  • 直接读/写结构到磁盘是个坏主意。它们可以包含高度依赖于编译器的填充。
  • 是的,最好直接序列化结构的每个字段,这样您就可以控制哪些位是外部表示的一部分。直接写入整个结构,你就没有这样的控制权了。

标签: c linux file io posix


【解决方案1】:

您正在打开文件以进行只写 (O_WRONLY),然后尝试从该文件中访问 read

【讨论】:

  • 就是这样!顺便说一句,您知道write() 在其第三个参数大于结构的大小时会如何表现吗?
  • @G.Samaras 我很确定在大多数情况下会调用未定义的行为。
  • @G.Samaras 因为第二个参数只是一个地址,写入将读取第三个参数。以该地址开头的许多字节。还记得 Heardbleed 错误吗?
  • 感谢 cmets。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-25
  • 2017-04-13
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多