【发布时间】:2016-10-14 09:37:45
【问题描述】:
在ext2文件系统中创建文件的过程是怎样的?
我正在尝试制作一个简单的系统调用,它采用路径并创建给定文件 - 就像触摸一样。
例如代码:
int main(void)
{
syscall(MY_SYSCALL_NUMBER, "/tmp/file");
}
应该在 /tmp 中创建一个名为“file”的文件。
现在系统调用本身应该如何工作?
到目前为止我的工作(我在这里省略了错误检查以确保可读性):
asmlinkage long sys_ccp(const char __user *arg)
{
struct path path;
struct inode *new_inode;
struct qstring qname;
//ommited copy from user for simplicity
qname.name = arg;
qname.len = length(arg);
kern_path(src, LOOKUP_FOLLOW, &path);
new_inode = ext2_new_inode(path.dentry->d_parent->d_inode, S_IFREG, &qname);
}
这似乎有效(我可以在日志中看到分配了一个 inode),但是,当我在目录上调用 ls 时,我看不到那里的文件。
我的想法是将新的inode添加到目录的struct dentry,所以我添加了这段代码:
struct dentry *new_dentry;
new_dentry = d_alloc(path.dentry->d_parent, &qname);
d_instantiate(new_dentry, new_inode);
但是,这似乎仍然不起作用(我无法使用 ls 查看文件)。
如何正确实现这个系统调用,我缺少什么?
编辑: 关于 R.. 答案 - 这个系统调用的目的是玩转 ext2 并了解它的设计,因此我们可以假设路径始终有效,文件系统确实是 ext2 等等。
【问题讨论】:
-
如果没有答案或问题已关闭,请勿重新发布问题!相反,如果它现在确实符合站点规则,请编辑原件并要求重新打开。见How to Ask。
-
添加 Linux 系统调用并不是“玩弄 ext2 并学习其设计”的方法。如果您想这样做,请编写一个可以处理 ext2 文件系统(作为图像文件或直接访问块设备)的独立实用程序。您似乎正在尝试做的是戳内核中 ext2 fs 实现的内核内部编程接口,这与内核 vfs 层的工作方式有关,而不是 ext2 的工作方式。这不是一个有用的练习。
标签: c linux linux-kernel ext2