有名管道的创建和读取

和无名管道的区别:

文件描述符0代表标准输入文件,一般是键盘;文件描述符1代表标准输出文件,一般是指显示器;文件描述符2代表标准错误输出,一般是指显示器;

无名管道必须是线程之间有亲原关系,但是有名管道是则解决了这个问题,它是通过路经将其写段和读段联系起来的。

//读段

1 #include<stdio.h>
  2 #include<sys/types.h>
  3 #include<unistd.h>
  4 #include<stdlib.h>
  5 #include<fcntl.h>
  6
  7 #define FIFO_NAME    "myfifo"
  8 #define BUF_SIZE      1024
  9 int main(void)
 10 {
 11     int fd;
 12     char buf[BUF_SIZE];
 13     umask(0);
 14     //打开管道的时候会阻塞,知道有写方代开管道。
 15     fd = open(FIFO_NAME,O_RDONLY);
 16     read(fd,buf,BUF_SIZE);
 17     close(fd);
 18     exit(0);
 19 }                                         

                               
//写段

           1 #include<stdio.h>
  2 #include<unistd.h>
  3 #include<stdlib.h>
  4 #include<fcntl.h>
  5 #include<string.h>
  6
  7 #define FIFO_NAME "myfifo"
  8 #define BUF_SIZE 1024
  9 int main(void)
 10 {
 11     int fd;
 12     char buf[BUF_SIZE]="hello write,i come from process named process!";
 13     int flag=0;
 14     //umask(0);和0666也就是~0&0666之后就是对文件的操作权限。
 15     umask(0);
 16     //mkfifo()相当于是用来创建管道的。
 17     if(mkfifo(FIFO_NAME,S_IFIFO | 0666) == -1)
 18     {
 19         perror("mkfifo error!");
 20         exit(1);
 21     }
 22     //打开管道的时候是会阻塞的直到有读放打开管道(阻塞的时候,是不会继续执行下面的代码的。)
 23     if(fd = open(FIFO_NAME,O_WRONLY) == -1)
 24     {
 25         perror("fopen error!");
 26         exit(1);
 27     }
 28     write(fd,buf,strlen(buf)+1);
 29     close(fd);
 30     exit(0);
 31 }                                                                                                     
~       


进程和线程是操作系统中的基本概念,它们是并发编程的重要组成部分。 进程是资源分配的最小单位,它是操作系统中运行的程序的一个实例。每个进程都有自己的地址空间、堆栈、数据区等资源,进程之间彼此独立,互不干扰。进程的创建、终止、等待等操作都是由操作系统负责管理的。 线程是进程中的一个执行单元,它是操作系统中最小的调度单位。线程共享进程的地址空间、堆栈、数据区等资源,不同的线程之间可以互相通信和协作。线程的创建、终止、等待等操作都是由操作系统负责管理的。 进程和线程的创建都需要调用操作系统提供的系统调用。在Linux系统中,进程的创建可以通过fork和exec函数来实现,线程的创建可以通过pthread_create函数来实现。进程和线程的终止可以通过exit函数来实现,也可以由操作系统强制终止。 进程和线程之间的通信可以通过管道有名管道等方式来实现。管道是一种半双工的通信方式,它只能在父进程和子进程之间进行通信。有名管道是一种全双工的通信方式,它可以在多个进程之间进行通信。在Linux系统中,管道创建可以通过pipe函数来实现,有名管道创建可以通过mkfifo函数来实现。 管道有名管道的读写操作都是通过文件描述符来实现的。读操作可以通过read函数来实现,写操作可以通过write函数来实现。在使用管道有名管道进行通信时,需要注意避免死锁和竞争条件等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值