0
名前付きセマフォと共有メモリで作業していますが、このコードがセグメンテーションフォルトをもたらす理由を教えてください。 これは、 のライターコードを実装しようとしているコードです名前付きセマフォと共有メモリを使用している読者とライターの問題なぜこのコードがセグメンテーションフォルトを与えるのか知る必要がありますか?なぜこのコードがセグメンテーションフォルトを与えるのですか?
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <semaphore.h>
#include <stdio.h>
#define MAX 20
int main (int argc, char** argv)
{
int fd;
sem_t *db;
int writtenData=0;
int *addr=NULL;
pid_t pid = getpid();
printf("hi\n");
fd = shm_open("/mymem",O_CREAT|O_RDWR, S_IRUSR | S_IWUSR); //segmentation fault here
printf("by\n");
ftruncate(fd,sizeof(int));
if(fd==-1)
printf("inja\n");
db = sem_open("db",O_CREAT,0,1);
addr = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
*(addr)= 0;
//write db toshared memory
//*
//*
while (writtenData<=MAX)
{
sem_wait(db);
printf("The Writter acquires the clock\n");
writtenData= *(addr);
printf("The writer %d writes the value %d\n",pid,writtenData);
writtenData++;
*(addr)= writtenData;
printf("The Writter release the Lock \n");
sem_post(db);
}
}