Linux内核模块中使用socket网络通信
求教啊,Linux内核模块使用网络通信,都需要什么头文件啊。我写了个简单的代码如下:
#include<linux/module.h>
#include<linux/syscalls.h>
MODULE_LICENSE("GPL");
int init_module(void)
{
int socket_addr=0;
printk(KERN_INFO"Hello,I am server %dn",socket_addr);
socket_addr=sys_socket(2,1,0); //我不知道宏定义在哪个文件定义,所以只能用数字了。
printk(KERN_INFO"%dn",socket_addr);
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO"server:Goodbyen");
}
编译可以通过。可是加载模块的时候哦会出现 Unknown Symbol
我通过 dmesg|tail查看 发现sys_socket这个符号为未定义,可是头文件明明定义了啊,比如我添加代码
extern sys_socket(int,int,int)就会说定义重复,说明我用头文件了啊。
谁能告诉我这是为什么啊。是不是使用sys_socket还需要做什么工作?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
http://lxr.free-electrons.com/ident?i=sys_socket ,这个我没用过。你试一下 extern long sys_socket(...);
如果你不定义返回类型,默认是int,如果long,和 int 冲突有可能出错。