2011-05-20 38 views
0

我想分享使用mmap。但它不起作用,因爲我得到一個段錯誤:Mmap問題 - >段錯

int fdL = open("/dev/zero", O_RDWR | O_CREAT); 
int *ligneC = (int *) mmap(0, sizeof (int), PROT_READ | PROT_WRITE, MAP_SHARED, fdL, 0); 

*ligneC = 0; 

我在哪裏錯了?

+0

您在指定'O_CREAT'並且缺少模式;仍然,因爲我認爲'/ dev/zero'已經存在,所以這不是問題。那是你所有的代碼嗎? – cnicutar 2011-05-20 18:59:58

+0

錯誤來自:* ligneC = 0; 我不知道爲什麼 – g123k 2011-05-20 19:04:40

+0

讓我「改述」那個:**是你所有的代碼**? – cnicutar 2011-05-20 19:05:25

回答

1

你的代碼適合我。嘗試添加一些錯誤檢查到您的代碼。你會知道什麼是失敗的,爲什麼:

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
#include <fcntl.h> 
#include <sys/mman.h> 
#include <errno.h> 
#include <string.h> 

int main(int argc,char*argv[]) 
{ 
    int fdL = open("/dev/zero", O_RDWR | O_CREAT); 

    if(fdL<0) 
    { 
     perror("open"); 
     exit(1); 
    } 

    int *ligneC = (int *) mmap(0, sizeof (int), PROT_READ | PROT_WRITE, MAP_SHARED, fdL, 0); 

    if(ligneC==(int*)-1) 
    { 
     perror("mmap"); 
     exit(1); 
    } 

    *ligneC = 0; 
    return 0; 
} 
+0

謝謝! 我得到:mmap:設備不支持的操作(我使用Mac) – g123k 2011-05-20 19:13:55