小编Joh*_*gue的帖子

管道输出时程序输出会发生变化

我有一个简单的C程序来处理启动时间(我不想发布完整的代码,因为它是一个活跃的学校作业).我的主要功能如下:

int main(void) {
  int i;

  for (i = 0; i < 5; i++) {
    printf("%lf\n", sample_time());
  }

  exit(0);
}
Run Code Online (Sandbox Code Playgroud)

sample_time()是一个函数,它计算分叉新进程所需的时间,并以秒为单位返回结果double.sample_time()分叉的一部分:

double sample_time() {
  // timing stuff

  if (!fork()) exit(0); // immediately close new process

  // timing stuff

  return a_sample_time;
}
Run Code Online (Sandbox Code Playgroud)

正如所料,运行程序,times在终端输出5个数字,如下所示:

$ ./times
0.000085
0.000075
0.000079
0.000071
0.000078
Run Code Online (Sandbox Code Playgroud)

但是,尝试将其传输到Unix终端中的文件(或其他任何位置)会产生意外结果.

例如,./times > times.out创建一个包含十五个数字的文件.此外,./times | wc -l输出15,确认早期的结果.跑步./times | cat,我再次看到十五个数字,其中五个以上是不同的.

有谁知道究竟是什么导致这样的事情?我没有想法.

./times!= ./times | cat …

c unix linux command-line-interface

7
推荐指数
1
解决办法
144
查看次数

标签 统计

c ×1

command-line-interface ×1

linux ×1

unix ×1