c - 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权限执行!
解决方案
问题原来是 crtime 使用 ext2fs_open 打开 FS 的方式。
我需要传递 EXT2_FLAG_RW 标志,否则默认情况下打开是只读的。
推荐阅读
- php - 当包需要 ^1.0 时如何在项目根目录中使用 @dev
- here-api - 如何在 HERE 免费增值中注册第二个 Android 应用程序或更改我的第一个应用程序的名称?
- angular - 如何制作一个当用户单击外部时,样式为工具提示会从 Angular 应用程序中消失?
- geospatial - r中的栅格范围不适用于地形协变量和彩色图像tif
- python - AWS CDK 使用 Python CfnResourceShare 创建 RAM 资源共享导致模板格式错误:JSON 格式不正确
- vim - 如何根据第一行影响视觉块?
- crystal-reports - 将子报表值传递给主报表的问题
- java - 如何在我的情况下解决休眠中的 n + 1 问题?
- java - 如何在 Android Studio 中与应用共享文件
- algorithm - 如何证明排序网络深度的下界是 lgn?