【发布时间】:2022-11-02 03:01:34
【问题描述】:
我有这个关于父/子关系的基本代码:
#define _DEFAULT_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <sys/wait.h>
#include <stdlib.h>
#include <sys/types.h>
int main(){
int sum = 6;
int *p = (int*) mmap(NULL, sizeof (int) , PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANONYMOUS, -1, 0);
*p = 7;
printf("filled %d in memory\n", *p);
int pID = fork();
if (pID == 0){
printf(" found %d\n", *p);
printf(" sum inside %d\n",sum + (*p));
exit(0);
}
else if (pID> 0){
wait(NULL);
printf("sum %d\n",sum+ *p);
printf("exit\n");
exit(0);
}
return 0;
}
当我在终端中编译它时,它给了我这个结果:
filled 7 in memory
found 7
sum inside 13
sum 13
exit
但是当我想使用./a.out > output.txt 命令将该输出保存在.txt 文件中时,我的代码似乎运行了两次填充块,并且我的output.txt 文件被填充了:
filled 7 in memory
found 7
sum inside 13
filled 7 in memory //**printed twice
sum 13
exit
我该如何解决?
【问题讨论】:
标签: c shared-memory