Записать массив в общую память - PullRequest
1 голос
/ 29 марта 2019

Я получаю ошибку асегментации, когда пытаюсь записать массив 1 ГБ в общую память.Когда я уменьшаю размер, он работает нормально.

Что происходит?Это то, что нужно писать это последовательно?

  • @ author Silberschatz, Galvin and Gagne
  • Основные понятия операционной системы - девятое издание
  • Авторские права John Wiley & Sons- 2013
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fcntl.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <sys/mman.h>
#include <unistd.h>
int main()
{
    const int SIZE = 1024*1024*1024;
    const char *name = "shared_memory";

    int shm_fd;
    char *ptr, *start;

    shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);

    /*shm_open: cria ou abre um objeto de
    memória compartilhado.

    /* O tamanho inicial de um segmento é de 0 bytes.
    A função "ftruncate" define o tamanho do
    segmento.*/
    ftruncate(shm_fd,SIZE);


    ptr = mmap(0,SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
    if (ptr == MAP_FAILED) {
        printf("Map failed\n");
        return -1;
    }
    /*Escreve na memória compartilhada.*/
    start = ptr;
    sprintf(ptr,"Hello: ");
    ptr += 7; //Move o ponteiro
    int c;
    for (c = 0; c <= SIZE; c++,ptr++)
            *ptr = 97 + rand() % (123-97);
    *ptr = '\0';
    ptr++;
    *ptr=10;

    //memcpy(ptr,"conteudo",tamanho);
    return 0;
}

...