【发布时间】:2015-08-05 04:18:24
【问题描述】:
我正在尝试在内核空间中打印用户空间缓冲区的内容,但是我收到了一些垃圾字符,我不确定我哪里出错了。
SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len,
unsigned, flags, struct sockaddr __user *, addr,
int, addr_len) {
char *messageRead = kmalloc(len,GFP_KERNEL);
unsigned long bytesNotCopied = copy_from_user(messageRead,(char*)buff,len);
printk("The messageRead Read is %s \n",messageRead);
.....
.....
}
bytesNotCopied 返回 0,因此我能够确认内容已被复制。但是当我尝试打印 messageRead 值时,它返回了一些垃圾值。
【问题讨论】:
-
函数无法编译,因为缺少
buff的类型。在size_t和len之间也有错位的逗号。 -
这与套接字有什么关系?
-
alk,这是内核空间所遵循的格式。
-
我怀疑它应该是:
int printChar(void __user * buff, size_t len). -
alk,感谢您的帮助,让我修改代码并重新发布,我正在尝试打印socket.c文件中的内容