【发布时间】:2015-09-27 02:13:04
【问题描述】:
尝试将消息写入与子进程的匿名共享内存,终止它。然后让家长阅读消息。我已经看到使用通过read 和write 调用获得的文件描述符映射输入和输出文件的示例。但不知道如何正确处理这个问题。
int main(void) {
char *shared;
int status;
pid_t child;
shared = mmap(0, sizeof(int) , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
if (shared == MAP_FAILED) {
perror("mmap");
return 1;
}
child = fork();
if ( child == -1 ) {
perror("fork");
return 1;
} else if (child == 0) {
sprintf(shared, "foo");
} else {
printf("%s", shared);
wait(&status);
}
if (munmap (shared, sizeof(int)) == -1) {
perror("munmap");
return 1;
}
return 0;
}
【问题讨论】:
-
差不多了,你需要两件事:一个同步父级的方法,这样它在子级写入之前就不会读取,以及可以使用
write和@987654326 正常完成的实际读写@电话。阅读信号量手册:linux.die.net/man/7/sem_overview。尝试自己解决它,你就在几英寸之外(: -
@IshayPeled 我知道我可以使用 1 作为
read的第一个参数来将消息显示到屏幕上。我认为,在这种情况下,write需要一个文件 desc。