我正试图从命令行获取参数。并打开一个文件进行读/写,然后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");
}
答案 0 :(得分:0)
默认情况下,mmap
将您提供的地址作为提示,并尽可能地将内存映射到最近。要强制mmap
完全分配到startaddress
,必须提供标记MAP_FIXED。
请注意,该手册不鼓励使用此选项,因为如果此地址已经分配了内存,则可能导致内存损坏,或者只是失败。
此外,如果地址不是getpagesize
的倍数,映射将失败。