从标准输入读取到mmap

时间:2018-12-09 22:50:43

标签: c

我有这个循环,它从标准输入读取到数组

sudo systemctl status apache2.service

如果int* arr; arr = malloc(sizeof(int)*size); for (i = 0; i < size; i++) { read(0, &arr[i], 4); } 是共享内存指针arr

,如何使它工作?
arr=createSharedMemory(sizeof(int)*size)

当前是细分错误

1 个答案:

答案 0 :(得分:1)

检查您从mmap()获得的退货。

您尝试mmap()标准输入。除特殊环境外,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(这不太可能),您的读取循环将爆炸。