- 论坛徽章:
- 0
|
本帖最后由 t_bruce_yu 于 2011-11-30 22:03 编辑
问题是这样的,我想要在父进程的fork() == 0里面通过- setvbuf(stdout, outbuf, _IONBF, sizeof(outbuf));
复制代码 这种方式进行缓冲区的模式设置。但是子进程还是标准的行缓冲模式。如果是在子进程里面这样写,就没有问题……不知道应该怎么实现这种功能。请大侠帮助。关键代码如下:
父进程fork后的代码其实就是父进程通过管道向子进程输入标准输入流,但是我想要通过时间片的判断來实现子进程需要输入的时候,父进程能够在那个时候把输入的数据输出到屏幕上面。就是在行缓冲的这个位置卡住了……
- if (fork_result == (pid_t) - 1)
- {
- perror ("Fork failure");
- exit (EXIT_FAILURE);
- }
- if (fork_result == (pid_t) 0)
- {
- close (0);
- dup (file_pipe[0]);
- close (file_pipe[0]);
- close (file_pipe[1]);
- setvbuf (stdout, outbuf, _IONBF, sizeof (outbuf));
- execlp (progname, progname, NULL, NULL);
- exit (EXIT_FAILURE);
- }
- else
- {
- close (file_pipe[0]);
- while (*(row_input[i]) != '\0')
- {
- usleep (4000);
- if (waitpid (-1, &status, WNOHANG) > 0)
- {
- printf ("Press any key to continue\n");
- }
- else
- {
- printf ("%s", row_input[i]);
- }
- write (file_pipe[1], row_input[i], strlen (row_input[i]));
- i++;
- }
- usleep (100000);
- execlp ("killall", "killall", argv[1], NULL);
- close (file_pipe[1]);
- }
复制代码 |
|