在 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 等等。