-1

ext2 ファイル システムでファイルを作成するプロセスはどのようなものですか?

touch のように、パスを取得して特定のファイルを作成する単純なシステムコールを作成しようとしています。

たとえば、コードは次のとおりです。

int main(void)
{
    syscall(MY_SYSCALL_NUMBER, "/tmp/file");
}

/tmp に「file」というファイルを作成する必要があります。

では、syscall 自体はどのように機能するのでしょうか?

これまでの私の作業 (ここでは読みやすさのためにエラーチェックを省略しました):

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、ディレクトリを呼び出すと、そこにファイルが表示されません。

私の考えは、新しい i ノードをstruct dentryディレクトリに追加することだったので、次のコードを追加しました。

struct dentry *new_dentry;

new_dentry = d_alloc(path.dentry->d_parent, &qname);
d_instantiate(new_dentry, new_inode);

ただし、これはまだ機能していないようです (を使用してファイルを表示できませんls)。

このシステムコールを正しく実装する方法、何が欠けていますか?

編集: R.. についての回答 - この syscall の目的は、ext2 をいじってその設計について学ぶことです。そのため、パスは常に有効であり、ファイルシステムは実際には ext2 などであると想定できます。

4

1 に答える 1