首页 > 解决方案 > Linux C ext2fs_write_inode_full 无法写入

问题描述

成功读取文件 inode 后:

retval = ext2fs_read_inode_full(current_fs, inode, inode_buf, EXT2_INODE_SIZE(current_fs->super));
if (retval) {
    fprintf(stderr, "Failed to read inode\n");
    free(fs);
    free(inode_buf);
    return retval;
}

(此时我已验证 inode 包含问题文件的正确数据)

我立即尝试用这个写回:

  retval = ext2fs_write_inode_full(current_fs, inode, inode_buf, EXT2_INODE_SIZE(current_fs->super));
  if (retval) {
      fprintf(stderr, "Failed to write inode %d\n", retval);
  }

(当然,我打算在回写之前更改 inode 中的一些日期值)

但是 ext2fs_write_inode_full 返回错误值 2133571349。

该程序以root权限执行!

标签: clinuxinodeext2

解决方案


问题原来是 crtime 使用 ext2fs_open 打开 FS 的方式。

我需要传递 EXT2_FLAG_RW 标志,否则默认情况下打开是只读的。


推荐阅读