2010-09-21 170 views
1

我想用uClinux在嵌入式设备上实现共享内存。C共享内存

我的C源

#include <stdio.h> 
#include <sys/shm.h> 
#include <sys/stat.h> 
#include <sys/socket.h> 
#include <errno.h> 

//using namespace std; 

int main() { 
     int segment_id; 

     segment_id = shmget(04, getpagesize(), IPC_CREAT | 0666); 

     printf("Page size - %d\n",getpagesize()); 
     printf("Error in socket - %d\n",errno); 
} 

我得到一个错误

Page size - 4096 
Error in socket - 38 

谁能帮助我? 谢谢。

+1

我认为如果出现错误(如果shmget()返回-1),则errno只设置为有意义的值,否则它不代表任何内容。 – pmg 2010-09-21 13:18:32

+0

segment_id = -1 – Meloun 2010-09-21 13:26:20

+0

@pmg:是的,'errno'保留它设置的最后一个值,它可能在任何地方,除非你在系统调用之前明确地将它设置为零,然后在调用之后检查它。否则它有一个无意义的(剩余)值。 – 2010-09-21 13:52:50

回答

2

errno 38对应于ENOSYS,这意味着功能未实现。 我错过了一个内核配置。我必须启用CONFIG_SYSVIPC。

4

您需要测试segment_id值,并且只有在segment_id == -1时才使用errno。

+0

并且错误消息不正确 - 没有涉及套接字。 – Darron 2010-09-21 13:18:51

+0

segment_id = -1 – Meloun 2010-09-21 13:26:50

2

你的钥匙04看起来完全是假的。我猜你应该获得key_tftok

此外,如果您有选择,最好选择shm_open/mmap设施来完成此类任务。

由于我在这里,使用perror打印错误,也请删除问题标题中的C++,与C++无关。