jiaweizou 发表于 2012-11-24 16:46

父进程与curses写的子进程通过管道进行通信,父进程不能向管道写数据

需求:父进程获取数据,通过管道1传给子进程(子进程是用curses库写的),子进程处理完数据后,通过管道2将结果返回给父进程.

本人解决方案:父进程重定向子进程的标准输入和输出到管道,并通过execl打开子进程,这样子进程就可以从管道1获取数据,然后将数据输出到管道2.

问题:父进程能正常打开子进程,但是父进程向管道1写数据时,报错,错误信息为:管道已经关闭. 提示:父进程可以打开其他不是用curses库写的子程序,并能正常通信。

猜测:子进程有没有可能在initscr()时覆盖了标准输入?所以在子进程被打开时,关闭了管道1的读端.

子进程代码如下:

int main()
{
char sz_read={0};
//开始curses模式
initscr();
// 禁用行缓冲
raw();
// 当执行getch()函数的时候关闭键盘回显
noecho();
// 关闭新行的平移
nonl();


string str_res;
int i_ch;
while( ( i_ch=getch()) != ERR   )
{
   addch(i_ch);
   refresh();
}
endwin();
}
页: [1]
查看完整版本: 父进程与curses写的子进程通过管道进行通信,父进程不能向管道写数据