zoukankan      html  css  js  c++  java
  • 有名管道

    有名管道(FIFO)。
    有名管道是持久稳定的。
    它们存在于文件系统中。
    FIFO比无名管道作用更大,因为它们能让无关联的进程之间交换数据。
    一个shell命令可以建立有名管道
    mkfifo [option] name
    mkfifo创建一个名为name的有名管道
     
     
    mkfifo fifo1。
      –创建一个有名管道fifo1。
    cat < fifo1。
      –通过cat命令从fifo1中读取数据。
    ls > fifo1。
      –将ls命令输出的结果写入fifo1中
     
    创建fifo。

    int mkfifo(const char *pathname, mode_t mode)

    函数执行成功返回0,否则返回-1,并设置变量errno。
     
     
    mkfifo函数例子。
    int main(int arg, char *args[])
    {
        mkfifo("fifo1", 0666);
        return 0;
    }
    删除fifo。

    int unlink(const char *pathname);

    函数执行成功返回0,否则返回-1,并设置变量errno。
     
     
    unlink函数例子。
    int main(int arg, char * args[])
    {
        int i = unlink("fifo1");
        if (i == -1)
        {
            printf(strerror(errno));
        }
        return 0;
    }
    打开和关闭FIFO。

    int open(const char *pathname, int flags);

    int close(int fd);

    Linux的一切都是文件这一抽象概念的优势,打开和关系FIFO和打开关闭一个普通文件操作是一样的。
     
     
     
    FIFO的两端使用前都必须要打开
    在读写FIFO时,如果FIFO以O_NONBLOCK和O_RDONLY标志打开,那么调用马上就会返回
    如果在读写FIFO时,如果FIFO以O_NONBLOCK和O_WRONLY标志打开,在FIFO还没有为读出数据打开时,调用open会返回一个错误。
    如果open中没有指定O_NONBLOCK,O_RDONLY将阻塞open调用,一直到另一个进程为写入数据打开FIFO为止。相同的,O_WRONLY也导致阻塞一直到为读出数据打开FIFO为止。
     
     
    向一个没有为读出数据打开的FIFO写入数据会导致SIGPIPE信号,并设置errno。
    在最后一个写数据的进程关闭FIFO以后,读数据的进程能在它下一次的读操作中监测到EOF标志
     
     
    读FIFO例子
    int main(int arg, char * args[])
    {
        int len = 0;
        char buf[PIPE_BUF];
        memset(buf, 0, sizeof(buf));
        int fd = open("fifo1", O_RDONLY);
        while ((len = read(fd, buf, sizeof(buf))) > 0)
        {
            printf("%s
    ", buf);
        }
        close(fd);
        return 0;
    }
     
    写FIFO例子
    int main(int arg, char * args[])
    {
        int len = 0;
        char buf[PIPE_BUF];
        memset(buf, 0, sizeof(buf));
        int fd = open("fifo1", O_WRONLY);
        while(1)
        {
            scanf("%s", buf);
            if (buf[0] == '0')
                break;
            write(fd, buf, sizeof(buf));
        }
        close(fd);
        return 0;
    }
     
  • 相关阅读:
    Android启动流程
    Android异步加载图像小结
    ViewPager的setOnPageChangeListener方法详解
    极光推送的集成
    物体旋转的问题gl.glTranslatef,gl.glRotatef如何饶物体的中心轴旋转
    实现生成星星,让星星自转和绕原点公转的简单demo。
    混色,半透明的设定,以及我们视角即屏幕处在-1层,-1层的物体是看不见的
    三维世界里的坐标和变换,逆方向旋转移动三维世界的方式来实现3D漫游
    OpenGL中glMatrixMode的使用,以及glPushMatrix和glPopMatrix的原理
    OpenGL纹理上下颠倒翻转的三种解决办法(转)
  • 原文地址:https://www.cnblogs.com/shichuan/p/4496167.html
Copyright © 2011-2022 走看看