我有一个 C 语言程序,可以将一些数据打印到标准输出。为此,我使用了 printf
,但我还需要将数据保存到文件中,因此我将其更改为 fprintf
。问题是,使用 fprintf 时,数据顺序错误,不管输出是标准输出还是文件。
if(...) {
out = fopen(param.F, "w");
} else {
out = stdout;
}
// some code here
fprintf(out, "a");
// more code
fprintf(out, "b");
....
因此,输出总是不同的。有时是
acb
有时是
cab
等等...我尝试了 setbuf 和 fflush 的各种组合,但都没有帮助。
编辑:知道我在我的程序中使用了一些 fork()
可能很重要,但正如我之前提到的,使用 printf 时没有问题。
这是我的输出:
1:理发师:支票
2: 客户 1: 创建
3:顾客1:进入
5:理发师:准备好
6:客户1:准备好
4: 客户 2: 创建
7:理发师:完成
8:理发师:支票
9:顾客2:进入
10:客户 1:服务
11:理发师:准备好
12:客户2:准备好
13:理发师:完成
14:理发师:支票
15:客户 2:服务
它应该按数字排序。该程序的结构如下:
int main() {
pid = fork();
if(pid == 0) {
// barber printfs
} else if (pid > 0) {
// customer printfs
}
}
最佳答案
(不能评论,必须回答...)
不,不是 printf/fprintf 缓冲区不同,如果您执行 fprintf(stdout, ...) 或 printf(...),FILE* 对象是相同的。
多个进程正在写入同一个文件,由于每个进程中没有同步和不同的缓冲,输出是困惑的。
关于c - fprintf 以错误的顺序打印数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812348/