共享内存编程错误(O_RDRW,PROT_WRITE,MAP_SHARED)

问题描述:

我想为共享内存对象运行程序。我的代码如下:共享内存编程错误(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。提前感谢。

#include <sys/mman.h> 请在为了解决PROT_WRITE

+0

感谢@krassi EM它的工作原理。你知道如何去除O_RDRW错误吗? – vivek321