首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

linux pipe无法write!该怎么解决

2012-03-09 
linux pipe无法write!!!!!C/C++ code#includeunistd.h#includesys/types.h#includeiostream#include

linux pipe无法write!!!!!

C/C++ code
#include<unistd.h>#include<sys/types.h>#include<iostream>#include<string.h>int main(int argc,char* argv[]){    int command_pipe[2];    pid_t pid;    pid = fork();    char command_string[255];    if(pipe(command_pipe) < 0)        std::cerr<<"pipe failed"<<std::endl;    if(pid<0)        std::cerr<<"fork failed!"<<std::endl;    if(pid == 0)    {        char ch[255] = {'\0'};        close(command_pipe[1]);        int n=read(command_pipe[0],ch,255);        std::cout<<"child read:"<<n<<std::endl;        std::cout<<ch<<std::endl;    }    else        if(pid >0)        {            close(command_pipe[0]);            char m[255];            strcpy(m,"111");            if(-1!= write(command_pipe[1],m,4))                std::cout<<"write success"<<std::endl;                        else                                 std::cout<<"write fail"<<std::endl;            close(command_pipe[1]);        }    return 0;}


上面代码无法实现管道通信。
输出:
child read :0

因为write句子写了if else 所以 write success和write fail至少有一个会输出,但实际上二者都未输出
请问是为什么呢?
如何解决?谢谢

[解决办法]
你的代码父子进程各自创建了各自的pipe.

然后子进程关闭自己管道的写, 进行读是可行的.
但是父进程会出错,因为关闭了读,写管道是不行的哦,man write看一下帮助把.

错误就是fork和pipe配合的问题, 应该先pipe, 然后fork, 这样子进程就继承了pipe的fd

热点排行