在学习课程中,我需要同时使用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命令以同时运行此程序?
答案 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+
并修改代码,方法是为其添加sleep
和fflush
:
#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