C общей памятью - PullRequest
       17

C общей памятью

1 голос
/ 21 сентября 2010

Я пытаюсь реализовать совместную память на встроенном устройстве с помощью uClinux.

Мой источник 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

Может кто-нибудь помочьмне?Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 сентября 2010

Вам нужно протестировать значениеgment_id и использовать errno, только если сегмент_id == -1.

2 голосов
/ 21 сентября 2010

Errno 38 соответствует ENOSYS, что означает, что функция не реализована.Я пропустил конфиг ядра.Я должен включить CONFIG_SYSVIPC.

2 голосов
/ 21 сентября 2010

Ваш ключ 04 выглядит полностью поддельным. Вы должны получить key_t с ftok, я думаю.

Кроме того, если у вас есть выбор, может быть лучше выбрать shm_open / mmap средств для такой задачи.

И так как я нахожусь в этом, используйте perror, чтобы напечатать ошибки, а также, пожалуйста, удалите C ++ из названия вашего вопроса, не имеет ничего общего с C ++.

...