在用户空间程序中,我通过mmap分配一些内存作为以下函数调用:
void *memory;
int fd;
fd = open(filepath, O_RDWR);
if (fd < 0)
return errno;
memory = mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd, 0);
if (memory == MAP_FAILED)
return -1;
//syscall() goes here
在系统调用的内核空间中,我试图将数据复制到内存映射区域,如下所示:
copy_to_user(memory,src,4096);
编辑:在帖子中添加了错误检查代码以便澄清
copy_to_user()
调用在这种情况下反复失败,而如果我做了memory = malloc()
,它就会一直成功。
在这种情况下,我是否为mmap获取了一些错误标记?
答案 0 :(得分:-1)
开放成功吗?那么mmap呢?目标文件足够大吗?你能通过用户空间中的映射来写文件吗?
另外,重复的4096是你的代码错误的强烈打击。用户空间应该通过预期的大小。