2013-12-14 3 views
1

내가 mmap에있는 파일 열기를 시도하고 작동하지 MAP_SHARED : MAP_PRIVATE를 사용하는 경우 그것은 잘 작동 ,하지만 MAP_SHARED는 잘못된 인수 오류가 발생합니다 mmap를 인도 표준시의 읽기 파일/쓰기의 mmap은

int size; 
struct stat s; 
const char * file_name = argv[1]; 
int fd = open (argv[1], O_RDWR); 
int pagesize = sysconf(_SC_PAGE_SIZE); 

/* Get the size of the file. */ 
int status = fstat (fd, & s); 
size = s.st_size; 
size += pagesize-(size%pagesize); 

//mmap memory 
d = mmap (0, size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); 
//error handeling 
if(d == -1) 
{ 
    perror("mmap"); 
    printf("Error opening file %s\n",argv[1]); 
    return -1; 
} 

내가 뭘 잘못하고 있니?

+0

d는 AzzUr1 @ 부호 문자 – arnoapp

+1

: 그것은 파일 시스템 드라이버의에서 패러랠이 질문은 나에게 많은 도움이

... 메모리 수정의이 종류를 구현하고 있지 않는 것 같다 올바른 방법 :'d'를 포인터로 만드십시오. 'void * d;'와 (void *) - 1을 비교하라. 'if (d == (void *) - 1)'이면, 설정에 대해 조금 더 이야기하십시오. OS가 어떤 것인지, 컴파일러가 경고를 받는지, 어떻게 프로그램을 호출 할 것인지, 어떤 출력을 얻을 것인지 등을 결정할 수 있습니다. 그리고 mmap()에 전달하는 '크기'는 무엇입니까? (확인을 위해 프린트해라.) – nos

+0

당신은 확실히'open()'을 검사해야하고,'fstat()'호출을 검사해야한다. 둘 중 하나라도 실패하면 문제가 있음을 알게됩니다. 또한 이미 제안했듯이'fd','pagesize','status','size','argv [1]'과 같은 키 값을 출력해야합니다. –

답변

1

오류의 원인은 내 기본 시스템의 코드를 실행할 때 VM (Parallels)에서 Ubuntu Linux를 사용한다는 것이 었습니다. 당신이 경우에 어떤 차이가 있습니까 Invalid argument for read-write mmap?

관련 문제