免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2254 | 回复: 0

求解怎么在父进程里面设置子进程的标准缓冲模式啊 [复制链接]

论坛徽章:
0
发表于 2011-11-30 22:02 |显示全部楼层
本帖最后由 t_bruce_yu 于 2011-11-30 22:03 编辑

问题是这样的,我想要在父进程的fork() == 0里面通过
  1. setvbuf(stdout, outbuf, _IONBF, sizeof(outbuf));
复制代码
这种方式进行缓冲区的模式设置。但是子进程还是标准的行缓冲模式。如果是在子进程里面这样写,就没有问题……不知道应该怎么实现这种功能。请大侠帮助。关键代码如下:
父进程fork后的代码其实就是父进程通过管道向子进程输入标准输入流,但是我想要通过时间片的判断來实现子进程需要输入的时候,父进程能够在那个时候把输入的数据输出到屏幕上面。就是在行缓冲的这个位置卡住了……

  1. if (fork_result == (pid_t) - 1)
  2. {
  3.         perror ("Fork failure");
  4.         exit (EXIT_FAILURE);
  5. }
  6. if (fork_result == (pid_t) 0)
  7. {
  8.         close (0);
  9.         dup (file_pipe[0]);
  10.         close (file_pipe[0]);
  11.         close (file_pipe[1]);
  12.         setvbuf (stdout, outbuf, _IONBF, sizeof (outbuf));
  13.         execlp (progname, progname, NULL, NULL);
  14.         exit (EXIT_FAILURE);
  15. }
  16. else
  17. {
  18.         close (file_pipe[0]);
  19.         while (*(row_input[i]) != '\0')
  20.         {
  21.                 usleep (4000);
  22.                 if (waitpid (-1, &status, WNOHANG) > 0)
  23.                 {
  24.                         printf ("Press any key to continue\n");
  25.                 }
  26.                 else
  27.                 {
  28.                         printf ("%s", row_input[i]);
  29.                 }
  30.                 write (file_pipe[1], row_input[i], strlen (row_input[i]));
  31.                 i++;
  32.         }
  33.         usleep (100000);
  34.         execlp ("killall", "killall", argv[1], NULL);
  35.         close (file_pipe[1]);
  36. }

复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP