собственно что хочется?
хочется промапить два файла в один маассив. например файл А идёт и оффсета 0 до рамера SIZE1-1, а файл Б от оффеста SIZE1 до SIZE1+SIZE2-1.
как бы ничего продебы сложного но вот такой код сегфолтится сразу послее финального return-a рандомально. т.е. при разных значениях SIZE1 и SIZE2 иногда проходит нормально,а иногда сегфолтится.#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <string.h>
#define MAIN_SIZE 40960
#define SWAP_SIZE MAIN_SIZE*2
int create_file(char *fname,off_t size){
int fd;
if((fd=open(fname,O_CREAT|O_RDWR,S_IRWXU))<0){
perror("open(2)");
return -1;
}
if(lseek(fd,size-1,SEEK_SET)==(off_t)-1){
perror("lseek(2)");
close(fd);
return -1;
}
if(write(fd,(void*)"",1)<0){
close(fd);
return -1;
}
if(lseek(fd,0,SEEK_SET)==(off_t)-1){
perror("lseek(2)");
close(fd);
return -1;
}
return fd;
}
int main(){
void *main_mem=NULL,*swap_mem=NULL;
int main_fd,swap_fd ;
main_fd = create_file("main",MAIN_SIZE);
if(main_fd<0) return -10;
swap_fd = create_file("swap",SWAP_SIZE);
if(swap_fd<0) return -20;
if((main_mem = mmap(NULL,MAIN_SIZE,PROT_WRITE,MAP_SHARED,main_fd,0))==MAP_FAILED){
perror("mmap(2)#1");
_exit(2);
}
if((swap_mem = mmap(main_mem+MAIN_SIZE,SWAP_SIZE,PROT_WRITE,MAP_FIXED|MAP_SHARED,swap_fd,0))==MAP_FAILED){
perror("mmap(2)#2");
_exit(2);
}
memset(main_mem,'A',MAIN_SIZE);
memset(swap_mem,'B',SWAP_SIZE);
if(munmap(main_mem,MAIN_SIZE+SWAP_SIZE)<0){
perror("munmap(2)");
}
close(main_fd);
close(swap_fd);
return 0;
}
No tags yet, please