1
回答
父进程通过管道与curses子进程通信,管道不能写数据
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

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

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

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

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

子进程代码如下:

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


 string str_res;
 int i_ch;
 while  ( ( i_ch=getch()) != ERR   )
 {
   addch(i_ch);
   refresh();
 }
 endwin();
}

举报
jiawei_z
发帖于5年前 1回/406阅
顶部