我需要编写在 Linux 操作系统上运行的程序:
当主程序启动时,子程序从主程序中分离出来,当子程序受到父程序的中断时可以执行;
父程序等待键盘输入的文本行(文本行应按 结束);
输入文本行后,父程序向子程序发送中断,子程序通过“管道” channel 读取文本行并创建一个文本文件。
如果输入空行,则程序的两个部分都会结束它们的工作。
问题是,我知道使用 gets() 是不好的,那么在我的情况下如何改用 fgets()?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <unistd.h>
FILE *f;
int main(void)
{
int pfds[2];
char buf[1000];
pipe(pfds);
f = fopen("input.txt", "w");
fclose(f);
do
{
if (!fork())
{
printf("PARENT: enter input text from keyboard\n");
gets(buf);
printf("PARENT: writing to the pipe\n");
write(pfds[1], buf, 1000);
printf("PARENT: exiting\n");
exit(0);
}
else
{
f = fopen("input.txt", "a+");
printf("CHILD: waiting from PARENT\n");
read(pfds[0], buf, 1000);
printf("CHILD: read \"%s\"\n", buf);
fprintf(f,"%s\n", buf);
fclose(f);
printf("CHILD: input.txt file created\n", buf);
wait(NULL);
}
}
while (buf[0] != '\0');
printf("PROGRAM: done\n");
return 0;
}
最佳答案
您已在"w" 模式下打开文件。
f = fopen("program.txt", "w");
w 模式创建一个用于写入的空文件。如果已存在同名文件,则删除其内容并将该文件视为新的空文件。
以"w+" 或"a+" 模式打开文件。
关于c - 将 fgets() 与管道一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40796210/