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

倾尽家财请教一个管道通信的简单问题!谢谢大家

    来源: 互联网  发布时间:2015-12-28

    本文导语:  之前问过一次,可能自己说的不够明白。 目前想实现的就是通过串口读数据,通过网络将数据发送出去。大体思路是在网络通讯中建立串口通讯的进程,利用管道将串口读来的数据通过网络发送出去,下面是我 程序...

之前问过一次,可能自己说的不够明白。
目前想实现的就是通过串口读数据,通过网络将数据发送出去。大体思路是在网络通讯中建立串口通讯的进程,利用管道将串口读来的数据通过网络发送出去,下面是我
程序的框架,中间创建管道-》创建子进程->调用execv函数运行串口程序就不会了,请高手给指正一下,谢谢!!对高手应该不麻烦,我可郁闷了老长时间了!!
#include  //包含头文件
main()
{
 int........  //参数定义
 
 if(pipe(pipe_fd)0)  //在父进程中
{。。。。。。。。。。  //网络通讯的部分程序
 
 close(pipe_fd[1]);    //关闭主程序写端
 size=read(pipe_fd[0],buff,1024); //读管道
 printf("%s",buff);
if(sendbytes=send(sockfd,buff,1024,0)==-1) //网络发送
{perror("send");
 exit(1);
}
}
}

为了清楚,读串口程序我在下面贴出。应该比较简单的一个问题,就是对execv函数理解不深刻,不知道到底怎么传递。再谢!!

|
You did not transfer the pipe_fd[1] to the child in execv().

the pipe_fd[1] is known by the child before execv() because at the beginning child shares the memomery, address space ... with parent. but after execv(), the child will not share memomery .... with parent. So the pipe_fd[1] is not known to the child. and the file descriptor stored in pipe_fd[1] is still open in child after execv().

what you need to do is  to tell the /root/read what is the file descriptor for pipe writing. you can do this via command line argument. like "/root/read fd". and then in your read.c, you can just write(fd ,.....) to write data to the pipe.

regards


|
///目前想实现的就是通过串口读数据,通过网络将数据发送出去
你只是想实现这个功能,何必搞那么复杂呢!
你把从窜口读到一个缓冲里,然后从这个缓冲写到socket里不就行了,搞不懂你为什么整这么复杂

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


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

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

    浙ICP备11055608号-3