C 使用mmap添加到结构数组

C 使用mmap添加到结构数组,c,arrays,fork,c99,mmap,C,Arrays,Fork,C99,Mmap,我想通过fork分派一些任务,并在数组中收集关于这些任务结果的一些信息 我的想法是使用mmap在两者之间共享一个数据结构,并让子进程使用活动的结果更新结构数组,但我遇到了一些问题 #include <time.h> #include <unistd.h> #include <string.h> #include <stdio.h> #include <sys/mman.h> #include <stdlib.h> typ

我想通过fork分派一些任务,并在数组中收集关于这些任务结果的一些信息

我的想法是使用mmap在两者之间共享一个数据结构,并让子进程使用活动的结果更新结构数组,但我遇到了一些问题

#include <time.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <sys/mman.h>
#include <stdlib.h>


typedef struct message_s {
    int status;
    char message[256];
} message_t;


void child(message_t **result) {


    result[0]->status = 2;
    sprintf((char *) &result[0]->message, "Hello World!");
    usleep(1);

}

void parent() {
    printf("Parent\n");
    usleep(1);
    return;
}


int main() {
    size_t result_size = 1000 * sizeof(message_t);


    message_t **result_ar = mmap(NULL, result_size,
                                 PROT_READ | PROT_WRITE,
                                 MAP_SHARED | MAP_ANON, -1, 0);


    pid_t child_pid = fork();

    switch (child_pid) {
        case 0:
            child(result_ar);
            exit(0);

        case -1:
            exit(-1);
            break;
        default:
            parent();
    }

    int child_status;
    waitpid(child_pid, &child_status, 0);


    printf("\nRESULT: %i: %s\n\n", result_ar[0]->status, result_ar[0]->message);

    msync(result_ar, result_size, MS_SYNC);
    munmap(result_ar, result_size);

    return 0;
}
我用的是:

Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin14.5.0
Thread model: posix

代码中的一个间接寻址太多。尝试
message\u t*result\u ar=mmap(…)
结果[0]。状态=2以修复此问题。另外,不要忘记错误检查
mmap()
可能失败。

几乎所有东西都可能失败,出于简洁的原因,它(大部分)没有错误检查。也就是说,谢谢你的提示,它完全解决了我的问题!
Apple LLVM version 7.0.2 (clang-700.1.81)
Target: x86_64-apple-darwin14.5.0
Thread model: posix