首页 文章

从标准输入读取到mmap

提问于
浏览
1

我有这个循环从标准输入读入数组

int* arr;
arr = malloc(sizeof(int)*size);
for (i = 0; i < size; i++)
{
    read(0, &arr[i], 4);
}

如果 arr 是共享内存指针,我怎样才能使它工作 arr=createSharedMemory(sizeof(int)*size)

int* createSharedMemory(size_t size) {
    int protection = PROT_READ | PROT_WRITE;
    int visibility = MAP_ANONYMOUS | MAP_SHARED;
    return (int*)mmap(0, size, protection, visibility, 0, 0);
}

目前它是分段错误

1 回答

  • 0

    检查 mmap() 的退货 .

    你试过 mmap() stdin . 除了异国情调的环境,stdin是某种终端或管道,它们都不支持内存映射IO .

    试试这个样本:

    int* createSharedMemory(size_t size) {
        int protection = PROT_READ | PROT_WRITE;
        int visibility = MAP_ANONYMOUS | MAP_SHARED;
        int *p (int*)mmap(0, size, protection, visibility, -1, 0);
        if (p == (int*)(ptrdiff_t)-1) return NULL;
        return p;
    }
    
    arr = createSharedMemory(sizeof(int)*size);
    if (arr == NULL) {
        perror("mmap");
        exit(3);
    }
    

    顺便说一句,如果 sizeof(int) < 4 不太可能,你的读循环将会爆炸 .

相关问题