管道通信(无名、有名)

  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");
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值