我正在尝试使用C ++编辑CentOS安装上的/etc/fstab
文件。我的想法是,基于另一个配置文件,我将添加fstab中不存在的条目,或者编辑fstab文件中挂载点相同的条目。这使我们可以在初始启动时正确设置系统。
我发现setmntent()
和getmntent()
用于迭代现有条目,因此我可以轻松检查fstab中的条目是否也存在于我的配置文件中。然后我可以使用addmntent()
添加任何尚不存在的条目 - 文档中没有说明能够编辑条目,只在文件末尾添加新条目。似乎无法编辑现有条目或删除条目。奇怪的是这个特征不存在,只有CR而不是CRUD的UD。
如果我能帮助它,我宁愿不必编写自己的解析器。
我的另一个选择是:
setmntent()
getmentent()
将整个fstab读入内存并执行任何添加和/或编辑endmntent()
/etc/fstab
进行撰写/etc/fstab
(因此清空文件)setmntent()
addmntent()
虽然可能很好,但看起来有点乱。
答案 0 :(得分:5)
修改/etc/fstab
等系统配置文件时请记住这些文件是关键状态,如果您的“编辑”因断电而中断,可能会导致无法重启。
解决这个问题的方法是:
FILE* out = setmntent("/etc/fstab.new", "rw");
FILE* in = setmntent("/etc/fstab", "r");
while (m = getmntent(in)) { addmntent(out, m); }
fflush(out); endmntent(out); endmntent(in);
/etc/fstab
:rename("/etc/fstab.new", "/etc/fstab");
作为练习,读者可以更改while循环的主体以修改现有元素,替换特制的mntent
或其他内容。如果您对此有具体问题,请询问。
rename()
的UN * X语义保证即使在断电的情况下,您也可以使用原始版本或新版本。
有一个原因没有modifymntent()
- 因为这会鼓励糟糕的编程/改变系统关键文件的坏方法。你在帖子的最后说“......可能很好......” - 不。更改系统配置文件的唯一安全方法是编写完整的修改后的副本,将其同步到安全存储,然后使用重命名替换旧的。