2017-01-25 9 views
1

Linuxカーネルモジュール内にディレクトリを作成する際に問題があります。Linuxカーネルモジュール - ディレクトリの作成

私が望むもの:カーネルモジュール内にディレクトリを作成する。

は、ここに私の実際のコードです:

struct file *fp = (struct file *) NULL; 
fp = filp_open("/home/testdir", O_DIRECTORY|O_CREAT, S_IRUSR); 

しかし、それは代わりに、ディレクトリのファイルを作成します。

I「がO_DIRECTORY」フラグなしで上記と同じコードを試みた:

struct file *fp = (struct file *) NULL; 
fp = filp_open("/home/testdir", O_CREAT, S_IRUSR); 

その結果は前の結果と同様です。

私はその動作を理解していません。私は間違って何をしていますか?

編集1:私はラズベリーPI、Raspbian、カーネルのバージョンにコーディングしています :4.4.43-V7

+0

おそらく 'O_DIRECTORY'は親ディレクトリを作成することを意味しますが、' 'home/testdir/delete-this" 'を試しましたか?それが動作する場合、間違った機能を使用しています。ああ、これはただの野生の推測です。私は 'filp_open()'が何であるか、まったく分かりません。 –

+0

これは動作しませんが、お試しいただきありがとうございます!ディレクトリ "testdir"や "delete-this"を作成しません –

+0

なぜ 'mkdir()'を使わないのですか?この呼び出しは、あなたが戻り値をチェックしていない男によると失敗するはずですか? ["パス名がディレクトリでない場合、オープンを失敗させる"](http://rz2.com/man2/open.2.html)。ちなみに、これは 'NULL'をキャストするのには役に立たず、直後に変数をNULLに初期化することは無意味です。これは悪い習慣です。 – Stargateur

答えて

0

これは、ディレクトリを作成しますがopendirのようなディレクトリを開き、しないん(ディレクトリが存在する必要があります) 。

+0

"O_DIRECTORY | O_CREAT"の組み合わせは機能しませんか? –

+0

正確には、filp​​_openはopenと同様に動作し、openでディレクトリを作成することはできません。 –

+0

私は解決策を得ました。 :-) –

3

私は自分でそれを手に入れました。 溶液である:

struct file *fp = (struct file *) NULL; 
fp = filp_open("/home/testdir/", O_DIRECTORY|O_CREAT, S_IRUSR); 

注「/」パスの末尾。

お試しいただきありがとうございます!

関連する問題