linux下的管道通信程序

原创 2007年09月24日 16:48:00
client.c功能:向管道发送数据

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/select.h>
#include <sys/time.h>
#define SIP_PIPE    "/tmp/sip-reg"
#define MSG_SIZE    100
int main(void)
{
    int sip_writer_fd;
    static char buffer[MSG_SIZE];
    int test = 1000;
    sip_writer_fd = open(SIP_PIPE, O_WRONLY | O_NONBLOCK);
    if (sip_writer_fd < 0) {
        perror("open control pipe for write");
        exit(1);
    }

    for (;;)
    {
        memset(buffer, 0, sizeof buffer);
        sprintf(buffer,"%d/n",test++);
        write(sip_writer_fd, buffer, strlen(buffer));
        sleep(1);
    }
    return 0;

server.c功能:从管道读取并打印到终端

int main(void)
{
    int sip_control_pipe;
    static char buffer[MSG_SIZE];
    double period = 0.5;
    unlink(SIP_PIPE);
    mkfifo(SIP_PIPE, 0666);

    sip_control_pipe = open(SIP_PIPE, O_RDONLY | O_NONBLOCK);
    if (sip_control_pipe < 0)
    {
        perror("open control pipe for read");
        exit(1);
    }
    for (;;)
    {
        fd_set rds;
        struct timeval step;
        int ret,len;

        FD_ZERO(&rds);
        FD_SET(sip_control_pipe, &rds);
        step.tv_sec  = period;
        step.tv_usec = (period - step.tv_sec) * 1000000L;

        ret = select(sip_control_pipe + 1, &rds, NULL, NULL, &step);
        if (ret < 0) {
            perror("select");
            exit(1);
        }
        if ((ret != 0) && (FD_ISSET(sip_control_pipe, &rds)))
        {
            memset(buffer, 0, sizeof buffer);
            len = read(sip_control_pipe, buffer, MSG_SIZE);
            if (len < MSG_SIZE)
            {
                printf(buffer);
            }
        }
    }
    return 0;
}

 

Linux下的进程通信方式: 管道通信详解

管道是单向的、先进先出的、无结构的字节流,它把一个进程的输出和另一个进程的输入连接在一起。...
  • rl529014
  • rl529014
  • 2016年05月20日 21:03
  • 3624

Linux下进程的通信方式: 有名管道(命名管道)

1.有名管道(命名管道)说明 命名管道通过路径名来标识,并且在文件系统中是可见的。 建立了管道之后,两个进程就可以把它当作普通文件一样进行读写操作。...
  • rl529014
  • rl529014
  • 2016年05月20日 22:00
  • 1801

Linux进程间通信——使用匿名管道

在前面,介绍了一种进程间的通信方式:使用信号,我们创建通知事件,并通过它引起响应,但传递的信息只是一个信号值。这里将介绍另一种进程间通信的方式——匿名管道,通过它进程间可以交换更多有用的数据。 一...
  • ljianhui
  • ljianhui
  • 2013年08月22日 03:29
  • 20377

linux下进程的管道通信和软中断通信

  • 2017年12月29日 10:01
  • 197KB
  • 下载

linux下进程间的通信——有名管道fifo学习笔记

linux下进程间的通信——有名管道fifo学习笔记
  • MR_Allen_Lwx
  • MR_Allen_Lwx
  • 2016年10月11日 20:47
  • 172

Linux下通信方式之一-----------管道

首先先介绍一下进程间通信的概念以及进程间通信的目的 进程间通信概念:进程间通信就是在不同进程之间传播或交换信息,那么不同进程之间存在着什么双方都可以访问的介质呢?进程的用户空间是互相独立的,一般而言是...
  • weiaiyisheng_ljj
  • weiaiyisheng_ljj
  • 2017年12月26日 16:14
  • 13

Linux下多任务间通信和同步-管道

Linux下进程间通信-管道通信管道简介 Linux的管道主要包括两种:无名管道和有名管道.无名管道特点它只能用于具有亲缘关系的进程之间的通信(也就是父子进程或者兄弟进程之间).它是一个半双工的通信模...
  • ce123
  • ce123
  • 2013年10月08日 10:34
  • 4341

Linux下进程间通信:管道-pipe函数

摘要:在本系列序中作者概述了 linux 进程间通信的几种主要手段。其中管道和有名管道是最早的进程间通信机制之一,管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道...
  • starstarstone
  • starstarstone
  • 2012年04月20日 17:02
  • 331

Linux下的管道通信

管道通信方式分为无名管道和又名管道,无名管道可用于具有亲缘关系的进程间,有名管道可以没有亲缘关系的进程通信。 1)管道是半双工的,数据只能向一个方向移动,所以,需要两个进程互相通信时需要建立两个管道...
  • best_fiends_zxh
  • best_fiends_zxh
  • 2016年10月24日 18:58
  • 159

Linux下进程间通信:命名管道-mkfifo

Linux下进程间通信:命名管道-mkfifo 由 lgb 于 星期日, 2010/09/12 - 21:24 发表  IPC  Linux  mkfifo  mknode ...
  • bailyzheng
  • bailyzheng
  • 2012年04月19日 09:09
  • 763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下的管道通信程序
举报原因:
原因补充:

(最多只允许输入30个字)