由于要访问大内存(over 4G),所以要使用以上几个函数。
但是在使用过程中遇到几个问题:
1. mmap2按照man里说的,include了
[code]/*mycp.c*/
#include
FILE* ptr; 文件是以 fd=open(tim,O_RDONLY|O_WRONLY|O_CREAT,S_IRWXU) 打开! ptr=(FILE*)mmap(NULL,sb.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0); 这样使用mmap有错误没? mmap不是返回一个void*吗?
#include
#include
typedef struct{ char name[4]; int age; }people; main(int argc, char** argv) { int fd,i; int pagesize,offset; people *p_map; pagesize = sysconf(_SC_PAGESIZE); printf("pagesize is %d\n",pagesize); fd = open(argv[1],O_CREAT|O_RDWR|O_TRUNC,00777); lseek(fd,pagesize*2-100,SEEK_SET);//设置文件大小。因为mmap不能改变文件大小 write(fd," ",1); offset = 0; //此处offset = 0编译成版本1;offset = pag...
hi, all 我用mmap把一个elf格式的可执行文件放入内存. mmap一直返回错. 我的代码如下: stat (file, &file_stat); fd = open(file, O_RDONLY); ret_val = mmap(NULL, file_stat.st_size, PROT_READ, MAP_PRIVATE|MAP_FILE|MAP_VARIABLE, fd, getpagesize()); 为什么ret_val老是-1. 我的环境是salories. 谢谢
从输出看mmap确实映射了,但myread读到的同mywrite所写的并不实时对应,有什么办法改吗,即使阻塞也可以,和msync没关吧应该?先谢过 [code](myread.c) #include int main() { int fd; int *shm; fd = open("data.tmp",O_CREAT|O_RDWR,00777); if(fd<0) { ... } int len; len = lseek(fd,0,SEEK_END); if(len<1) { lseek(fd,1,SEEK_SET); write(fd,'1',1); } shm = mmap(NULL,1,PROT_READ|PROT_WRITE,MAP_S...