copy_from_user函数打印垃圾值

标签 c linux sockets kernel

我正在尝试在内核空间中打印用户空间缓冲区的内容,但是我收到了一些垃圾字符,并且我不确定哪里出了问题。

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 值时,它返回了一些垃圾值。

最佳答案

返回值0表示复制成功。 为什么要将缓冲区打印为字符串,即在 printk() 中使用 %s。 buff是用户进程中的字符串吗?如果没有尝试以这种方式转储

for(i=0; i<len; i++) /*make sure you declare i */
{
    printk("%x ",messageRead[i]);
}

关于copy_from_user函数打印垃圾值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30408607/

相关文章:

c - 使用 fork() 的单词频率

c - xcode多个主要方法

c - 实时感知 sleep() 调用?

linux - 即使提供了 SSH key ,SCP 也无法工作权限被拒绝

c++ - 我的程序不发送消息或不接收到套接字,ip 是 127.0.0.1

javascript - onValueChange 不断充斥我的套接字服务器

c - linux下如何获取统计数据?

压缩稀疏位数组

c++ - Premake 无法在 Linux 上使用 g++?

java - TCPSocket 服务在设备 sleep 模式下停止