C 使用mmap添加到结构数组
我想通过fork分派一些任务,并在数组中收集关于这些任务结果的一些信息 我的想法是使用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
#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