管道通信(无名、有名)
  1. 说明
        Linux的管道通信分为无名管道和有名管道;无名管道只能应用到父进程与子进程之间;而有名管道可以用在任意两个进程之间。
     2.管道学习

  •     函数:
  •     创建进程: fork   ,  vfork
  •     退出进程:exit
  •     等待进程:wait
  •     执行进程:exec,   system    

fork与vfork的对比

  • 其共同之处是都可以创建子进程
  • 不同之处:1、fork:子进程拥有独立的数据段、堆栈。    vfork:子进程与父进程共享数据栈和堆栈。
  •                  2、fork:父、子进程的执行次序不确定。     vfork:子进程先运行,父进程后运行。

有名管道通信

有名管道又称FIFO文件,因此可以采用文件操作方法去操作有名管道

  • FIFO文件在使用上和普通文件有相似之处,但是也有不同之处:
    1. 读取Fifo文件的进程只能以”RDONLY”方式打开fifo文件。

    2. Fifo文件的进程只能以”WRONLY”方式打开fifo文件。

    3. Fifo文件里面的内容被读取后,就消失了。但是普通文件里面的内容读取后还存在。
       
     
  • 写程序
  • /*
    * 写fifo,即往fifo文件里写入数据
    * 但必须创建有名管道(fifo)
    * 然后打开进行写入操作
    */
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    #include <stdio.h>

    void main()
    {
    int fd;
    int ret, ret1;

    /* 创建FIFO文件 */
    mkfifo("/tmp/myfifo",0666);

    /* 打开fifo文件 */
    fd = open("/tmp/myfifo",O_WRONLY);

    /* 写入数据到fifo文件*/
    ret = write(fd,"hello fifo",11);

    close(fd);

    }
  •     读程序
  • #include <sys/types.h>
    #include <sys/stat.h>
    #include <stdio.h>
    #include <fcntl.h>


    void main()
    {
    char c_buf[15];
    int fd;

    fd = open("/tmp/myfifo",O_RDONLY);
    read(fd,c_buf,11);

    printf("read %s\n",c_buf);

    close(fd);

    unlink("/tmp/myfifo");
    }


阅读更多
个人分类: Linux学习 进程通信
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

管道通信(无名、有名)

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭