Я пытаюсь получить аргументы из командной строки. и откройте файл для чтения / записи, затем выделите память, чтобы предложить начальный адрес функции 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");
}
\n
(например,printf("Suggested file address: %p\n", startaddress);
или добавитьfflush(stdout);
после печати. В противном случае проверьте, чтоstartaddress != NULL
. (Ps: вы должны получить выводmmap()
в каком-либо другом указателе - присвоение адресаmmap()
- это просто подсказка) - person maddouri   schedule 22.10.2015malloc()
ated пробела,mmap()
не может просто использовать его. Однакоmmap()
попытается сопоставить данные как можно ближе к блоку памяти, адрес которого вы указали. - person maddouri   schedule 22.10.2015mmap()
? Во-вторых, присвоениеmmap()
адреса в куче, такого как адрес, возвращенныйmalloc()
, - хороший способ уничтожить вашу кучу - если ваше сопоставление будет успешным по этому адресу, это приведет к тому, что фактические страницы кучи будут отключены от адресного пространства процесса. - person Andrew Henle   schedule 22.10.2015