Linux C ext2fs_write_inode_full 无法写入

Posted

技术标签:

【中文标题】Linux C ext2fs_write_inode_full 无法写入【英文标题】:Linux C ext2fs_write_inode_full failing to write 【发布时间】:2020-07-07 21:40:48 【问题描述】:

在成功读取文件 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权限执行!

【问题讨论】:

您是否完整地查看了文档? libext2fs - Manual 我问,因为修补它,我什至没有打开文件系统。 github - planetlabs / crtime 上有一个项目可能会有所帮助。希望其他人有更多的细节。 我使用来自 crtime 的代码作为我的基础。我刚刚添加了对 ext2fs_read_inode_full 的调用。感谢您提供指向手册的指针。 手册中关于 ext2fs_read_inode_full 的内容不多 更正我之前的评论我把对 ext2fs_write_inode_full 的调用添加到 crtime !!! 【参考方案1】:

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

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

【讨论】:

以上是关于Linux C ext2fs_write_inode_full 无法写入的主要内容,如果未能解决你的问题,请参考以下文章

linux C编程如何查看文件类型

Linux C/C++文本文件操作

如何在linux中运行c程序

如何在linux中运行c程序

Linux C - C基础篇(一)

linux中如何编译c文件