当前位置:  技术问答>linux和unix

父子进程之间管道通信问题

    来源: 互联网  发布时间:2016-11-19

    本文导语:  本帖最后由 Esperantor 于 2011-04-05 18:44:07 编辑 看不懂这个程序输出的结果,求解释: 源代码: esperantor@ubuntu:~/source$ cat noname_pipe_example.c #include #include #include int main(int argc,char **argv) { pid_t pid; int temp; int  pipedes[...

本帖最后由 Esperantor 于 2011-04-05 18:44:07 编辑
看不懂这个程序输出的结果,求解释:


源代码:
esperantor@ubuntu:~/source$ cat noname_pipe_example.c
#include
#include
#include

int main(int argc,char **argv)
{
pid_t pid;
int temp;
int  pipedes[2];
char s[13] = "test message!";
char d[13];

if ((pipe(pipedes))== -1)
{
perror("pipe");
exit(EXIT_FAILURE);
}

if ((pid=fork()) == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if(pid==0)
{
printf("now ,write data to pipen");
if ((write(pipedes[1],s,13)) == -1)
{
perror("write");
exit(EXIT_FAILURE);
}
else
{
printf("the written data is :%sn",s);
exit(EXIT_SUCCESS);
}
}
else if (pid >0)
{
sleep(2);
printf("now,read data from pipen");

if ((read(pipedes[0],d,13))==-1)
{
perror("read");
exit(EXIT_FAILURE);
}
printf("the data from pipe is :%sn",d);
}
return 0;
}



结果:
esperantor@ubuntu:~/source$ gcc -o noname_pipe_example noname_pipe_example.c
esperantor@ubuntu:~/source$ ./noname_pipe_example
now ,write data to pipe
the written data is :test message!
now,read data from pipe
the data from pipe is :test message!test message!


怎么会输出2个输入字符串(test message!)呢?

|
我修改了一下,现在已经正常了,修改地方我有标出
#include    
#include    
#include    

int main(int argc,char **argv)
{
    pid_t    pid;
    int        temp;
    int     pipedes[2];
    char    s[14] = "test message!";//这里数组长度应该为14,包括字符串结速符
    char    d[13];

    if ((pipe(pipedes))== -1)
    {
        perror("pipe");
        exit(EXIT_FAILURE);
    }

    if ((pid=fork()) == -1)
    {
        perror("fork");
        exit(EXIT_FAILURE);
    }
    else if(pid==0)
    {
        printf("now ,write data to pipen");
        if ((write(pipedes[1],s,14)) == -1)//这里长度13改为14
                {
                    perror("write");
                    exit(EXIT_FAILURE);
                }
                else
                {
                    printf("the written data is :%sn",s);
                    exit(EXIT_SUCCESS);
                }
    }
    else if (pid >0)
    {
        sleep(2);
        printf("now,read data from pipen");
        
        if ((read(pipedes[0],d,14))==-1)//这里长度13改为14
        {
            perror("read");
            exit(EXIT_FAILURE);
        }
        printf("the data from pipe is :%sn",d);
    }
    return 0;
}


    
 
 

您可能感兴趣的文章:

  • 请教个父子进程管道问题
  • 管道和父子进程的问题
  • 在用管道通信父子进程遇到问题
  • 请教,进程通讯问题,除了父子进程能进行通讯外,任意两个进程都可以吗?
  • fork() 父子进程执行顺序问题
  • 在linux,如何用共享内存来实现进程间的通讯?(这些进程没有父子关系)
  • 父子进程读写文件问题
  • 父子进程共享数据的问题
  • 使用信号量如何让父子进程交替运行?
  • 父子进程问题,高手请进!!!
  • 请教一个父子进程控制的问题
  • 父子进程共享文件描述符问题
  • 高手请进,如何完备的获得进程间父子关系,谢谢!
  • 父子进程通信:内存共享的问题
  • 父子进程通信
  • 父子进程问题
  • 如何理解父子进程修改共享量的运行结果
  • 关于fork后父子进程的关系
  • 父子进程间的数据传输!online!
  • 关于父子进程执行顺序的问题
  • 父子进程间的信号通讯问题
  • fork()的父子进程返回ID
  • apue中父子进程同步的问题。
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • HTML标签参考手册 iis7站长之家
  • jquery的父子兄弟节点查找示例代码
  • DevExpress实现TreeList父子节点CheckState状态同步的方法
  • 创建父子进程,实现异步并发,这段代码对吗?
  • 简直崩溃,有个家伙跟我将fork()函数父子进程共享全局变量!是么?
  • 用记录锁fcntl来实现父子进程同步
  • 父子进程中数据地址的问题
  • 深入分析父子线程、进程终止顺序不同产生的结果
  • 父子进程拷文件程序的几处不懂得地方
  • 关于父子进程控制
  • 如何可以让父子进程交替输出
  • 父子进程交互输出问题。
  • 兄弟们,出手吧----》父子进程间相互通信问题
  • [新手求解]父子进程交替执行的问题
  • 在linux下,用共享内存来实现进程间的数据交互,请问如何实现同步?(这些进程没有父子关系)
  • Linux 父子进程使用TCP连接通信connect错误
  • 不显示删除回复显示所有回复显示星级回复显示得分回复 父子进程间通信:1:共享内存2:信号量:父进程里请求信号量错误,高手帮忙


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3