问题遇到的现象和发生背景
编写了两个简单程序file1.c和file2.c,file1中通过控制台输出一句信息,file2创建子进程调用file1,要如何才能避免file1的输出信息输出两次呢?
问题相关代码,请勿粘贴截图
file1.c代码:
#include "stdio.h"
#include "stdlib.h"
#include <unistd.h>
int main()
{
// printf("test file-1 \n");
// fsync(STDOUT_FILENO);
char cstr[] = "12345";
write(STDOUT_FILENO, cstr, sizeof(cstr));
exit(0);
}
file2.c代码:
#include "stdio.h"
#include "stdlib.h"
#include <sys/wait.h>
#include <unistd.h>
int main()
{
pid_t pid;
if (pid = vfork() < 0)
{
printf("fork error \n");
}
else if (pid == 0)
{
if (execl("/home/kongchengbo/testshell/test1.out", "test1.out", (char *)0) < 0)
printf("excel error \n");
if (waitpid(pid, NULL, 0) < 0)
printf("waitpid error \n");
}
exit(0);
}
运行结果及报错内容
1234512345
实际打印了两次
我的解答思路和尝试过的方法
怀疑是缓冲区没有冲洗掉,尝试了:
1:file1中,没有用write,修改为:
#include "stdio.h"
#include "stdlib.h"
#include <unistd.h>
int main()
{
printf("test file-1 \n");
fsync(STDOUT_FILENO);
exit(0);
}
测试结果:
test file-1
test file-1
修改缓冲大小为NULL,setbuf(stdout, NULL); 效果也一样的,还是打印两次
我想要达到的结果
子进程里面的内容只打印一次