Отправить большие данные в память... как?

Тема в разделе "WASM.HEAP", создана пользователем device, 11 июн 2008.

  1. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    Вот такая вот задачка есть. Сначала - код
    Код (Text):
    1. #include <sys/types.h>
    2. #include <sys/ipc.h>
    3. #include <sys/msg.h>
    4. #include <stdio.h>
    5. #include <string.h>
    6. #include "memory4.h"
    7. #include <fcntl.h>
    8.  
    9. #define MSGSZ     128
    10. #define IFGET     0
    11.  
    12.  
    13.  
    14.  
    15.  
    16. main()
    17. {
    18.     int DEVICE_T;
    19.     int msgflg = 01000 | 0666;
    20.     key_t ACCESS_CODE;
    21.     message_buf sbuf;
    22.     size_t buf_length;
    23.  
    24.     sbuf.memory4_t.method=IFGET;
    25.     (void) strcpy (sbuf.memory4_t.index,"_main");
    26.     (void) strcpy (sbuf.memory4_t.CType,".text");
    27.     int fd = open ("pr_test", O_RDONLY);
    28.     char b[256];
    29.     // ВОТ ТУТ ОТПРАВЛЯЕМ ДАННЫЕ 256 байт.
    30.     read ( fd, b, 256);
    31.    
    32.  
    33.     (void) strcpy (sbuf.memory4_t.MESSAGE,b);
    34.  
    35.         ACCESS_CODE = 0xD1;
    36.  
    37.  
    38.     if ((DEVICE_T = msgget(ACCESS_CODE, msgflg ))<0){
    39.         perror ("MSG_CREAT");
    40.         exit (-1);
    41.     }
    42.         else
    43.     sbuf.mtype = 1;
    44.     buf_length = sizeof (sbuf) - sizeof (long);
    45.  
    46.    if (( msgsnd(DEVICE_T, &sbuf, buf_length, IPC_NOWAIT))<0){
    47.  
    48.     perror ("MSG_SEND ");
    49.     exit (-1);
    50.     }
    51.  
    52.     else
    53.  
    54.  
    55.     exit(0);
    56. }
    В общем, как отправить в оперативную память данные размером в 6 мегабайт если памяти разрешено использовать 4 килобайта?
    Вижу одно решение - создавать очереди ( по 64 байта) с флагом (0|1), но при этом будет ли прога работать так же быстро? Нужен алгоритм.. вот может кто писал такое?
     
  2. tigsid

    tigsid Member

    Публикаций:
    0
    Регистрация:
    11 июн 2004
    Сообщения:
    62
    В Unix раздел тему, наверно, надо.
    Почему не использовать share секцию.
    Размер msg ограничен sys параметрами ОС.
    посмотри sockpair.
     
  3. device

    device Reflection

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    1.198
    Адрес:
    RF
    memory4 накладывает ограничение.
    Там есть такая запись
    Код (Text):
    1. struct memory4
    2. {
    3.     int method; // three methods (0 - IFGET 1 - IFPOST 2 - IFHDR
    4.     char index [128]; // if IFHDR then may be empty
    5.     char CType [128]; // if index:)
    6.     char MESSAGE [256]; // MSG
    7.  
    8. }memory4;
    9. typedef struct msgbuf {
    10.          long    mtype;
    11.          struct  memory4 memory4_t;
    12.          } message_buf;