2017-09-24 76 views
0

我想爲共享內存對象運行程序。我的代碼如下:共享內存編程錯誤(O_RDRW,PROT_WRITE,MAP_SHARED)

#include <stdio.h> /*adding standard input output library*/ 
#include <stdlib.h> /*standard library for four variable types, several macros, and various functions for performing general functions*/ 
#include <string.h> /*adding string library*/ 
#include <sys/fcntl.h> /* library for file control options */ 
#include <sys/shm.h> /*library for shared memory facility*/ 
#include <sys/stat.h> /*data returned by the stat() function*/ 
int main() 
{ 
    /* the size (in bytes) of shared memory object */ 
    const int SIZE=4096; 
    /* name of the shared memory object */ 
    const char *name = "OS"; 
    /* strings written to shared memory */ 
    const char *message_0 = "Hello"; 
    const char *message_1 = "World!"; 
    /* shared memory file descriptor */ 
    int shm_fd; 
    /* pointer to shared memory obect */ 
    void *ptr; 
    /* create the shared memory object */ 
    shm_fd = shm_open(name, O_CREAT | O_RDRW, 0666); 
    /* configure the size of the shared memory object */ 
    ftruncate(shm_fd, SIZE); 
    /* memory map the shared memory object */ 
    ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0); 
    /* write to the shared memory object */ 
    sprintf(ptr,"%s",message_0); 
    ptr += strlen(message_0); 
    sprintf(ptr,"%s",message_1); 
    ptr += strlen(message_1); 
    return 0; 
} 

但我得到以下錯誤

。錯誤:

‘O_RDRW’ undeclared (first use in this function) shm_fd = shm_open(name, O_CREAT | O_RDRW, 0666);

2.error:

‘PROT_WRITE’ undeclared (first use in this function) ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);

3.error:

‘MAP_SHARED’ undeclared (first use in this function) ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);

和警告這樣

note: each undeclared identifier is reported only once for each function it appears in

我試圖找到fctnl.hsham.hstat.h,發現了很多文件,但我想包括這個文件

#include "/usr/include/x86_64-linux-gnu/sys/fcntl.h" /*chose one file out of several options available*/ 
include "/usr/include/x86_64-linux-gnu/sys/shm.h" /*chose one file out of several options available*/ 
#include "/usr/include/x86_64-linux-gnu/sys/stat.h" /*chose one file out of several options available*/ 

但還是錯誤仍然same.I正在使用Ubuntu 16.04 LTS。提前感謝。

回答

1

#include <sys/mman.h> 請在爲了解決PROT_WRITE

+0

感謝@krassi EM它的工作原理。你知道如何去除O_RDRW錯誤嗎? – vivek321