gpt4 book ai didi

c - mmap 中的无效参数

转载 作者:太空宇宙 更新时间:2023-11-04 08:22:02 25 4
gpt4 key购买 nike

#include <stdio.h>      /* fprintf */
#include <stdlib.h> /* exit */
#include <string.h> /* memset */
#include <sys/mman.h> /* mmap */
#include <sys/types.h> /* pthread types */
#include <sys/stat.h> /* fchmod */
#include <pthread.h> /* thread primitives */
#include <fcntl.h> /* open */
#include <unistd.h> /* ftruncate */
#include <errno.h> /* errno */

#define LIB_ADDR 0xaabbccdd /* memorable random address */

#define UNMAP_FILE "unmapfile"
#define PAGE_SIZE 1024
#define DIE(msg) \
printf("-----\nDIE:%s\n-----\n", msg)

int
main(int argc, char **argv)
{
int err;
int unmap_fd;

unmap_fd = open(UNMAP_FILE, O_RDWR | O_CREAT);
if (unmap_fd < 0) DIE("open of unmap file failed");

err = ftruncate(unmap_fd, PAGE_SIZE);
if (err) DIE("ftruncate unmap file to page size failed");

err = mmap((void *)LIB_ADDR + PAGE_SIZE, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, unmap_fd, 0);
if (err = MAP_FAILED) DIE("mmap of to-be-unmapped page failed");

return 0;
}

我做的很简单。我只想将文件 mmap 到固定地址,但出现错误 mmap of to-be-unmapped page failed。我已经检查了所有内容,但仍然不知道。

最佳答案

这个

  if (err = MAP_FAILED) DIE("mmap of to-be-unmapped page failed");

应该是

  if (err == MAP_FAILED) DIE("mmap of to-be-unmapped page failed"); 
//Notice the ==

你只是在这里赋值,它使条件为真。

mmap(2) 返回一个 void*。所以 err 的类型也是错误的。声明一个新的 void 指针并使用它:

void *mptr;
....
....

mptr = mmap((void *)LIB_ADDR + PAGE_SIZE, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, unmap_fd, 0);
if (mptr == MAP_FAILED) DIE("mmap of to-be-unmapped page failed");

关于c - mmap 中的无效参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33011186/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com