我正在尝试为共享内存对象运行程序。我的代码如下:
#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;
}
但是我得到以下错误
1.错误:
‘O_RDRW’ undeclared (first use in this function) shm_fd = shm_open(name, O_CREAT | O_RDRW, 0666);
2.错误:
‘PROT_WRITE’ undeclared (first use in this function) ptr = mmap(0, SIZE, PROT_WRITE, MAP_SHARED, shm_fd, 0);
3.错误:
‘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.h
、sham.h
、stat.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*/
但错误仍然存在。我正在使用 Ubuntu 16.04 LTS
。在此先感谢您。
最佳答案
-
#include <sys/mman.h>
解决PROT_WRITE
; -
O_RDRW
应该是O_RDWR
-“开放阅读和WRite
”; -
#include <sys/mman.h>
修复MAP_SHARED
错误;
关于c - 共享内存编程错误(O_RDRW、PROT_WRITE、MAP_SHARED),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46392368/