zoukankan      html  css  js  c++  java
  • 有名管道FIFO进程间数据传输实例

      紧接着上面一个博客的简单介绍,下面进行一个没有血缘关系的进程间通信的实例,实现文件拷贝传输。

    有两个进程,一个主要是fifow进程:读文件Makefile内容,写入管道;另一个进程fifor:读管道内容,写入到Makefile2。

      首先,写端会创建一个管道,然后读取Makefile内容,写入到管道tp中:

    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<errno.h>
    #include<string.h>
    
    #include<signal.h>
    #define ERR_EXIT(m)
        do
        {
            perror(m);
            exit(EXIT_FAILURE);
        }while(0)  //宏要求一条语句
    int main(int argc,char*argv[])
    {
        int infd;
        umask(0);
        mkfifo("tp",0644);//创建tp管道
        infd=open("Makefile",O_RDONLY);//打开Makefile
        if(infd==-1)
            ERR_EXIT("open error");
        int outfd;
        outfd=open("tp",O_WRONLY);
        if(outfd==-1)
            ERR_EXIT("open error");
        char buf[1024];
        int n;
        while((n=read(infd,buf,1024))>0)//读Makefile数据
        {
            write(outfd,buf,n);//写入管道
        }
        close(infd);
        close(outfd);    
        return 0;
    }

      下面的进程就是读取管道数据,管道中有Makefile的内容,将它们读取出来,然后写入Makefile2,就可以实现拷贝功能了。

    #include<unistd.h>
    #include<sys/types.h>
    #include<sys/stat.h>
    #include<fcntl.h>
    #include<stdlib.h>
    #include<stdio.h>
    #include<errno.h>
    #include<string.h>
    
    #include<signal.h>
    #define ERR_EXIT(m)
        do
        {
            perror(m);
            exit(EXIT_FAILURE);
        }while(0)  
    int main(int argc,char*argv[])
    {
        int outfd;
        umask(0);
        outfd=open("Makefile2",O_WRONLY|O_CREAT|O_TRUNC,0644);//打开Makefile
        if(outfd==-1)
            ERR_EXIT("open error");
        int infd;//读取管道数据。
        infd=open("tp",O_RDONLY);
        if(infd==-1)
            ERR_EXIT("open error");
        char buf[1024];
        int n;
        while((n=read(infd,buf,1024))>0)//读管道数据
        {
            write(outfd,buf,n);//写入Makefile2
        }
        close(infd);
        close(outfd);    
        unlink("tp");
        return 0;
    }
  • 相关阅读:
    Socket 之 同步以及异步通信
    Socket 之 c#实现Socket网络编程
    Socket 之 API函数介绍
    Socket 之 原理与编程基础
    C# 之 user32函数库
    WinServer 之 访问同网段服务器 或 同一服务器多虚拟机间的访问
    annex-b格式
    FLV文件格式解析
    PHP5中的stdClass
    web服务器【apache/nginx] 关闭目录的浏览权限
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/8399612.html
Copyright © 2011-2022 走看看