2012-02-13 24 views
1

create_proc_entry()を使用してprocエントリを作成するLKMモジュールがあります。ユーザー空間プログラムから複雑なデータ(私は構造を考えています)を送り、LKMが受け取れるように/ procエントリに格納しなければなりません。ユーザ空間からのprocエントリへの読み込み/書き込み

今、私は、ユーザー空間から/ procエントリへの書き込みのコールバックがバッファの形式でデータ引数を持っているため、fwrite()のようなものを使用してバッファリングされた出力に構造データを変換する方法に困惑しています。

// fwrite prototype 
size_t fwrite (const void * ptr, size_t size, size_t count, FILE * stream); 

// user space write to /proc entry call back prototype 
int mod_write(struct file *filp, const char __user *buff, 
    unsigned long len, void *data); 

お勧めはありますか?

ありがとうございました。

+1

最も安全な賭けは、関連情報をテキストとして書き出すことです。エンディアンの問題を防ぎ、柔軟性を高め、デバッグをはるかに簡単にします。 –

+0

@larsmans、エンディアンは正常なマシンでは問題ではありません。柔軟性は議論の余地があります。構造体メンバを追加するということは、テキストをテキストに/から書き込むことを意味するので、それほど柔軟性はありません。 – ugoren

答えて

1

単純にデータを書き込むことができます。このような何か:

struct my_data s = { initialization... }; 
fwrite(&s, sizeof(s), 1, stream); 
fflush(stream); 

その後mod_writesへのポインタになるだろうし、カーネル空間にコピーします。
また、writeを使用することもできます。その後、フラッシュする必要はありません。

構造体にポインタが含まれていると、状況がより複雑になります。

+0

私の構造にはポインタが含まれていますが、その場合は何をする必要がありますか? – Jake

関連する問題