2010-09-21 168 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++無關。