ext2ファイルシステムでファイルを作成するプロセスはどのように見えますか?Ext2 - ファイルの作成方法
私はパスをとり、与えられたファイルのようなタッチを作成する単純なシステムコールを作ろうとしています。例えば
、コード:
int main(void)
{
syscall(MY_SYSCALL_NUMBER, "/tmp/file");
}
は、/ tmpに "ファイル" と呼ばれるファイルを作成する必要があります。
これで、システムコール自体はどのように機能するのですか?
これまでのところ(私はここreadibilityのエラーチェックをommited)私の仕事:
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);
}
これが動作しているようです(私はiノードが割り当てられているログに見ることができる)、しかし、私は上ls
を呼び出すときディレクトリ私はそこにファイルを見ることができません。
私の考えは、ディレクトリのstruct dentry
に新しいiノードを追加することでしたので、私はこのコードを追加:(私はls
を使用してファイルを見ることができません
struct dentry *new_dentry;
new_dentry = d_alloc(path.dentry->d_parent, &qname);
d_instantiate(new_dentry, new_inode);
しかし、これはまだ動作していないようです)。
このシステムコールを正しく実装するには、何が欠けていますか?
EDIT: このシステムのRについての答えは、ext2で遊んでその設計について学ぶことです。したがって、そのパスが常に有効であると仮定することができます。ファイルシステムは確かにext2などです。
回答がない場合や質問が終了した場合は、再度投稿しないでください。代わりにオリジナルを編集し、サイトルールに従っている場合は再オープンを求めます。 See [ask]。 – Olaf
Linuxのシステムコールを追加することは、「ext2を使いこなしてその設計を学ぶ」方法ではありません。これを行うには、ext2ファイルシステムを(イメージファイルとして、またはブロックデバイスに直接アクセスして)処理できるスタンドアロンのユーティリティを作成します。あなたがしようとしていることは、カーネル内でのext2 fs実装のためのカーネル内部プログラミングインタフェースを突き刺すことです。このインタフェースは、カーネルのvfs層がext2の動作よりもどのように機能するかに関係します。それは便利な運動ではありません。 –