我需要编写适用于Linux操作系统的程序:
当主程序启动时,子程序与主程序分离,子程序从父程序中断时可以执行;
父程序等待从键盘输入的文本行(文本行应按下结束);
输入文本行后,父程序向子程序发送中断,子程序通过“管道”通道读取文本行,并用它创建文本文件。
如果输入空行,则程序的两个部分结束其工作。
问题是,我知道使用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;
}
答案 0 :(得分:2)
您已在“w”模式下打开文件。
f = fopen("program.txt", "w");
w模式创建一个用于写入的空文件。如果已存在同名文件,则会删除其内容,并将该文件视为新的空文件。
以“w +”或“a +”模式打开文件。