c - fprintf 以错误的顺序打印数据

标签 c printf

我有一个 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/

相关文章:

c - 使用向后 for 循环替换 C 中字符串的结尾

c - 从文件中的特定点读取一行

c - 读取长度未知的字符串

C 将整数转换为字符串

c - 我在打字时遇到一些麻烦

c - 在 C 中扫描和打印字符时出现奇怪的代码交互

c++ - 似乎无法获得一个 char 数组来离开函数并在 main 中可用

c - 删除字符串中所有出现的子字符串

c - 如何模拟 send() 以便对函数 commSendPacket 进行单元测试?

c# - 从 C# 程序的 DLL 访问方法