将fgets()与管道

时间:2016-11-25 00:40:47

标签: c pipe fork fgets gets

我需要编写适用于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;
 }

1 个答案:

答案 0 :(得分:2)

您已在“w”模式下打开文件。

f = fopen("program.txt", "w");

w模式创建一个用于写入的空文件。如果已存在同名文件,则会删除其内容,并将该文件视为新的空文件。

“w +”“a +”模式打开文件。