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;
我在哪裏錯了?
我想分享使用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;
我在哪裏錯了?
你的代碼適合我。嘗試添加一些錯誤檢查到您的代碼。你會知道什麼是失敗的,爲什麼:
#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;
}
謝謝! 我得到:mmap:設備不支持的操作(我使用Mac) – g123k 2011-05-20 19:13:55
您在指定'O_CREAT'並且缺少模式;仍然,因爲我認爲'/ dev/zero'已經存在,所以這不是問題。那是你所有的代碼嗎? – cnicutar 2011-05-20 18:59:58
錯誤來自:* ligneC = 0; 我不知道爲什麼 – g123k 2011-05-20 19:04:40
讓我「改述」那個:**是你所有的代碼**? – cnicutar 2011-05-20 19:05:25