Вот такая вот задачка есть. Сначала - код Код (Text): #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdio.h> #include <string.h> #include "memory4.h" #include <fcntl.h> #define MSGSZ 128 #define IFGET 0 main() { int DEVICE_T; int msgflg = 01000 | 0666; key_t ACCESS_CODE; message_buf sbuf; size_t buf_length; sbuf.memory4_t.method=IFGET; (void) strcpy (sbuf.memory4_t.index,"_main"); (void) strcpy (sbuf.memory4_t.CType,".text"); int fd = open ("pr_test", O_RDONLY); char b[256]; // ВОТ ТУТ ОТПРАВЛЯЕМ ДАННЫЕ 256 байт. read ( fd, b, 256); (void) strcpy (sbuf.memory4_t.MESSAGE,b); ACCESS_CODE = 0xD1; if ((DEVICE_T = msgget(ACCESS_CODE, msgflg ))<0){ perror ("MSG_CREAT"); exit (-1); } else sbuf.mtype = 1; buf_length = sizeof (sbuf) - sizeof (long); if (( msgsnd(DEVICE_T, &sbuf, buf_length, IPC_NOWAIT))<0){ perror ("MSG_SEND "); exit (-1); } else exit(0); } В общем, как отправить в оперативную память данные размером в 6 мегабайт если памяти разрешено использовать 4 килобайта? Вижу одно решение - создавать очереди ( по 64 байта) с флагом (0|1), но при этом будет ли прога работать так же быстро? Нужен алгоритм.. вот может кто писал такое?
В Unix раздел тему, наверно, надо. Почему не использовать share секцию. Размер msg ограничен sys параметрами ОС. посмотри sockpair.
memory4 накладывает ограничение. Там есть такая запись Код (Text): struct memory4 { int method; // three methods (0 - IFGET 1 - IFPOST 2 - IFHDR char index [128]; // if IFHDR then may be empty char CType [128]; // if index:) char MESSAGE [256]; // MSG }memory4; typedef struct msgbuf { long mtype; struct memory4 memory4_t; } message_buf;