2016-06-13 21 views
-1

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などです。

+0

回答がない場合や質問が終了した場合は、再度投稿しないでください。代わりにオリジナルを編集し、サイトルールに従っている場合は再オープンを求めます。 See [ask]。 – Olaf

+0

Linuxのシステムコールを追加することは、「ext2を使いこなしてその設計を学ぶ」方法ではありません。これを行うには、ext2ファイルシステムを(イメージファイルとして、またはブロックデバイスに直接アクセスして)処理できるスタンドアロンのユーティリティを作成します。あなたがしようとしていることは、カーネル内でのext2 fs実装のためのカーネル内部プログラミングインタフェースを突き刺すことです。このインタフェースは、カーネルのvfs層がext2の動作よりもどのように機能するかに関係します。それは便利な運動ではありません。 –

答えて

1

あなたは、関連する抽象レイヤーを完全に混ぜています。あなたのコードのようなものが、まったく動作していても(それができるかどうかわからない場合)、実際には対応していないパスでこのシステムコールを作成した場合、カーネルがクラッシュしたり、 ext2ファイルシステムに変換します。

カーネルのfs抽象化では、基礎となるファイルシステムがext2(またはそれが何であるか)という事実は、ファイルをファイルに作成する作業とは無関係です。むしろこれらのすべては、fsタイプに依存しないレイヤーを通過しなければなりません。これは、パスにマウントされたfsタイプのバックエンドを使用します。

+0

また、パスが常にext2であると仮定すると、なぜこのようなものは動作しないのですか? – Josh

+1

@ジョシュ: "なぜこのようなものはうまくいかず、それを働かせるにはどうすればいいのか" - 同じ文の中にあるステートメントとその逆。ここに書いたことを読んだことさえありましたか? – Olaf

関連する問題