Просто храните целое число в сегменте разделяемой памяти: C - PullRequest
0 голосов
/ 09 мая 2011

Я просто пытаюсь разделить целое число между двумя процессами, но сегмент памяти инициализируется в программе 1 и используется в программе 4. Вот инициализация в программе 1:

shmid = shmget(key, sizeof(int*), 0666 | IPC_CREAT);
int *data = (int *)shmat(shmid, (void*)0,0);

Здесь я получаю предупреждение "приведение к указателю из целого числа разного размера". Argh.

Я полагаю, все просто, но я большой любитель IPC. И многое другое в с ...

Затем я передаю его другой программе:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg, semarg, pipe_from_p2_2, pipe_to_p5_2);

Не уверен, как получить доступ к нему на другой стороне, хотя. Как я могу вернуть int в Программе 4?

Ответы [ 2 ]

4 голосов
/ 09 мая 2011

Вы уверены, что вам не хватает заголовка, который определяет shmat(), и поэтому компилятор предполагает, что shmat возвращает целое число (не указатель).

1 голос
/ 09 мая 2011

Здесь я получаю предупреждение "приведение к указателю из целого числа разного размера".Argh.

Попробуйте использовать NULL вместо (void*)0.

Затем я передаю его другой программе:

snprintf(shmarg, sizeof(shmarg), "%n", data);
pid_t pid3 = run_cmd4("/home/tropix/hw11-4", shmarg,
                      semarg, pipe_from_p2_2, pipe_to_p5_2); 

Не уверен, как получить доступ к нему на другой стороне, хотя.Как я могу вернуть int в Программе 4?

Сам указатель бесполезен, если только область совместной памяти не загружена по тому же адресу виртуальной памяти в другой программе: вы, вероятно,даже не хочу пытаться это устроить - вместо этого позвольте другой программе (hw11-4) загрузить сегмент совместно используемой памяти и позвольте ОС выбрать адрес виртуальной памяти, а затем просто посмотрите на этот адрес для int.Таким образом, hw11-4 необходимо передать тот же ключ совместно используемой памяти (например, в качестве аргумента командной строки), и сам использовать shmget, чтобы открыть и получить ключ для, а затем shmat, чтобы отобразить сегмент совместно используемой памяти в память....

...