我有一个LKM模块,它使用create_proc_entry()创建一个proc条目。我必须从用户空间程序发送一些复杂的数据(我正在考虑一个结构)并将其存储在/ proc条目中,以便LKM可以接收它。
现在,我很困惑如何使用类似fwrite()的方式将结构数据转换为缓冲输出,因为从用户空间写入/ proc条目的回调具有缓冲区形式的数据参数。
// 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 );
有什么建议吗?
感谢。
答案 0 :(得分:1)
您应该能够简单地写入数据。像这样:
struct my_data s = { initialization... };
fwrite(&s, sizeof(s), 1, stream);
fflush(stream);
然后mod_write
将获得指向s
的指针并将其复制到内核空间中
您也可以使用write
,然后您不需要刷新它。
如果您的结构包含指针,事情会变得更复杂。