在mac控制台中同时运行2个c程序

时间:2017-10-05 05:37:04

标签: c shell

在学习课程中,我需要同时使用2个程序在一个文件中写字符串。

我在C上键入了两个类似的程序:

#include <stdio.h>
int main(int argc, char** argv)
{
   FILE *f;
   f = fopen("output.txt", "w+");
   while (1)
   {
      fprintf(f, "%s", "kill me pls \n");
   }
   return 0;
}

#include <stdio.h>
int main(int argc, char** argv)
{
   FILE *f;
   f = fopen("output.txt", "w+");
   while (1)
   {
      fprintf(f, "%s", " NO! \n");
   }
   return 0;
}

然后我编译并尝试使用命令

同时运行此程序

./prog1 & ./prog2 &

但没有发生任何事情。在控制台中我看到:

stolz$ ./prog1 & ./prog2 &
[7] 3920
[8] 3921

我如何键入shell命令以同时运行此程序?

1 个答案:

答案 0 :(得分:1)

如何在同一时间输入shell命令来运行此程序?

您在问题中提出的方式是正确的方式:

$ ./prog1 & ./prog2 &
[7] 3920
[8] 3921

启动同时在后台运行的两个程序。

然后会发生什么:您的代码会使用output.txt打开fopen w+man fopen告诉我们:

w+  Open for reading and writing.  The file is created if it does not
    exist, otherwise it is truncated.  The stream is positioned at the
    beginning of the file.

让我们将其更改为a+并修改代码,方法是为其添加sleepfflush

#include <stdio.h>
#include <unistd.h>                        # that also need this
int main(int argc, char** argv)
{
   FILE *f;
   f = fopen("output.txt", "a+");          # changed w+ to a+
   while (1)
   {
      fprintf(f, "%s", "kill me pls \n");
      fflush(f);                           # this for that:
      sleep(1);                            # that
   }
   return 0;
}

prog2.c进行上述更改,编译它们:

$ gcc -o prog1 prog1.c ; gcc -o prog2 prog2.c

然后启动它们tail output.txt

$ ./prog1 & ./prog2 &
[1] 6976
[2] 6977
$ tail -f output.txt 
kill me pls 
kill me pls 
kill me pls 
 NO! 
kill me pls 
 NO! 
kill me pls 
 NO! 
kill me pls