C 控制台和文件的fprintf和printf输出顺序不同
我在构建代码时遇到困难:C 控制台和文件的fprintf和printf输出顺序不同,c,C,我在构建代码时遇到困难: #include <stdio.h> #include <stdlib.h> int main(int argc, char **argv){ char *input[2]; input[0]= "ls"; input[1]= "pwd"; FILE *result; char *output = "output.txt"; FILE *fout = fopen(output, "w");
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv){
char *input[2];
input[0]= "ls";
input[1]= "pwd";
FILE *result;
char *output = "output.txt";
FILE *fout = fopen(output, "w");
if(!fout){
fprintf(stderr, "Can not read %s file\n", output);
return EXIT_FAILURE;
}
char command[256];
pid_t pid = 1;
int num = 0;
while(num < 2)
{
pid = fork();
if(pid == 0){
result = popen(input[num], "r");
char getline[256];
while(fgets(getline, 256, result) != NULL){
fprintf(fout, getline);
printf("%s", getline);
}
printf("\n");
}
else if( pid > 0){
fprintf(fout, "#command %d\n", num);
printf("#command %d\n", num );
wait(NULL);
}
else{
printf(stderr, "something wrong in process!");
break;
}
num++;
}
if(pid > 0){
pclose(result);
fclose(fout);
}
return EXIT_SUCCESS;
}
在output.txt
文件中:
Debug
main.c
output.txt
#command 1
#command 0
/home/lightning/workspace/prac
Debug
main.c
output.txt
/home/lightning/workspace/prac
谁能给我解释一下吗
我想要以下输出:
#command 0
Debug
main.c
output.txt
#command 1
/home/lightning/workspace/prac
#commnad NUM
从父进程打印,而#command NUM
的结果从子进程打印
我该怎么办?我已经很久没有用C编写代码了,但如果我读对了,你打开的是一个文本文件,派生出一个子进程(它或多或少会并行运行),让两个进程独立地异步写入该文件,然后退出 最有可能的是,这两个过程是一个字符一个字符地相互书写 您有两个选择:
是的,谢谢!只需添加一个函数,每次写入文件时打开写关闭,工作火!
#command 0
Debug
main.c
output.txt
#command 1
/home/lightning/workspace/prac