gpt4 book ai didi

c - 在Mac控制台中同时运行2个C程序

转载 作者:行者123 更新时间:2023-11-30 19:07:38 25 4
gpt4 key购买 nike

在学习类(class)中,我需要同时使用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 命令才能同时运行这个程序?

最佳答案

我必须如何输入 shell 命令才能同时运行这个程序?

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

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

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

然后会发生什么:您的代码使用 fopen w+ 打开 output.txtman 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

关于c - 在Mac控制台中同时运行2个C程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578540/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com