gpt4 book ai didi

c - 打印内存地址,映射

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

我正在尝试从命令行获取参数。并打开一个文件进行读/写,然后 malloc 内存以建议函数 mmap 的起始地址。但它不会打印任何地址(建议的和内核给定的地址),即使它正在创建文件。

#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/mman.h>
#include <stdlib.h>

int main(int argc, char **argv){

if(argc>=3){

int fd;
const char *fname=argv[1];
const char *str=argv[2];


if((fd=open(fname,O_CREAT|O_RDWR,0))!=-1){

int *startaddress = malloc(strlen(str)*sizeof(char));
mmap(startaddress, strlen(str)*sizeof(char), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);

write(fd,str,strlen(str));

printf("File address: %d\n",fd);
printf("Suggested file address: %p", startaddress);
close(fd);
free(startaddress);
}

}else
printf("You didn't enter a proper number of arguments.\n");

}

最佳答案

默认情况下,mmap 将您提供的地址作为提示并尽可能接近地映射内存。要强制 mmap 恰好在 startaddress 处分配,必须提供标志 MAP_FIXED。

请注意,手册不鼓励使用此选项,因为如果已在该地址分配了内存,它可能会导致内存损坏,或者只是失败。此外,如果地址不是 getpagesize 的倍数,映射将失败。

关于c - 打印内存地址,映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33278717/

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