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

请教通过fifo管道写,读数据问题

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

    本文导语:  本帖最后由 qiuchuan119 于 2011-02-28 23:50:17 编辑 首先是通过管道在一个while(1)里面写数据,等待read端的关闭(接受到SIGPIPE)信号时  #include   #include   #include   #include   #include   #include   #include   #include   #include...

本帖最后由 qiuchuan119 于 2011-02-28 23:50:17 编辑
首先是通过管道在一个while(1)里面写数据,等待read端的关闭(接受到SIGPIPE)信号时 

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  

#define FIFO_NAME "/tmp/my_fifo" 
#define BUFFER_SIZE PIPE_BUF 
#define TEN_MEG (1024 * 1024 * 10) 
void mypipe(int sig) 

    printf("the read file is closedn"); 

int main() 

    int pipe_fd; 
    int res; 
    int open_mode = O_WRONLY; 
    int bytes_sent = 0; 
    char buffer[BUFFER_SIZE + 1]; 
    (void) signal(SIGPIPE,mypipe); 
    if (access(FIFO_NAME, F_OK) == -1) { 
        res = mkfifo(FIFO_NAME, 0777); 
        if (res != 0) { 
            fprintf(stderr, "Could not create fifo %sn", FIFO_NAME); 
            exit(EXIT_FAILURE); 
        } 
    } 

    printf("Process %d opening FIFO O_WRONLYn", getpid()); 
    pipe_fd = open(FIFO_NAME, open_mode); 
    printf("Process %d result %dn", getpid(), pipe_fd); 

    if (pipe_fd != -1) { 
        while(1) { 
            res = write(pipe_fd, buffer, BUFFER_SIZE); 
            if (res == -1) { 
        fprintf(stderr, "Write error on pipen"); 
                exit(EXIT_FAILURE); 
            } 
            bytes_sent += res; 
        printf("fifo have writed  %d datan",bytes_sent); 
        } 
        (void)close(pipe_fd); 
    } 
    else { 
        exit(EXIT_FAILURE);         
    } 

    printf("Process %d finishedn", getpid()); 
    exit(EXIT_SUCCESS); 

下面是read端的代码,统计一共读了多少数据 

#include  
#include  
#include  
#include  
#include  
#include  
#include  
#include  

#define FIFO_NAME "/tmp/my_fifo" 
#define BUFFER_SIZE PIPE_BUF 

int main() 

int pipe_fd; 
int res; 
int open_mode = O_RDONLY; 
char buffer[BUFFER_SIZE + 1]; 
int bytes_read = 0; 

memset(buffer, '', sizeof(buffer)); 

printf("Process %d opening FIFO O_RDONLYn", getpid()); 
pipe_fd = open(FIFO_NAME, open_mode); 
printf("Process %d result %dn", getpid(), pipe_fd); 

if (pipe_fd != -1) { 
do { 
res = read(pipe_fd, buffer, BUFFER_SIZE); 
bytes_read += res; 
} while (bytes_read 

    
 
 

您可能感兴趣的文章:

  • 请教:ts流和数据管道有什么关系?急!
  • 请教大家一个关于管道的问题
  • 请教一个管道的用法
  • 请教一条用tar加管道进行更新复制的命令
  • 请教命名管道的问题
  • 倾尽家财请教一个管道通信的简单问题!谢谢大家
  • 请教个父子进程管道问题
  • 请教:linux下的有名管道 fifo深度多大?
  • 请教一下各位高手,为什么fifo管道在线程内总是write失败?
  • 高分请教,如何在FreeBSD上制作以web方式的控制台?就像那些ADSL Moden之类的硬件通过在在IE上输入http://192.168.1.1然后通过登录就可以
  • 请教局域网中如何通过ip地址得到主机名
  • 高手请教!linux怎样通过pid获取进程信息,如:进程名、进程状态等?
  • [请教]OpenAgent无法通过ACS服务器认证的原因
  • 请教为什么在C++编译通过并实现的程序,在linux下就会出错
  • 如何通过其他网站发送短消息(比如新浪)?JSP页面提交,高分请教!!
  • 请教一个linux下通过代理上网的问题!
  • 请教,怎样通过jsp和servlet实现rmi技术
  • 请教Linu下通过局域网连接Internet(急需要帮助,谢谢)
  • 请教一个完整的linux下通过串口传输各种文件的源码,多谢!
  • 请教:我想用linux的com口通过串口线访问另外的机器
  • 请教通过SSH使程序持续运行的方法
  • 请教 一个shell问题 如何通过shell获得一个日志文件中的增量部分
  • 新手虚心请教.在线等复....vsftp配置成功后,本机可以FTP上,但其他系统通过FTP工具不能上.防火墙不能关..
  • 请教高手,通过ssh连接suse linux的三种方式是否可以修改?
  • 请教各位大侠:怎样在LINUX下通过校园网配置上网
  • 请教Swing高手,如何在JTree中如何通过一个TreePath判断它代表的节点是不是叶节点?
  • 请教怎样通过一个字符窜ID来定位bean,再调用EJBHome.remove()的方法来删除??
  • 请教,通过改变时区来获得N天前日期,为啥只能是7天啊
  • 请教:写好了某个application并测试通过以后,接下来应该如何做?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题
  • 请教unix常用命令命令问题


  • 站内导航:


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

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

    浙ICP备11055608号-3