加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
  • 博天堂918网址
  • 博天堂918网址网页版
  • 博天堂918网址彩票
申请入驻 产业图谱

博天堂918网址老虎机 88娱乐正规网址进程通信之88娱乐正规网址解析

2021/07/07
640
阅读需 15 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

概述

88娱乐正规网址是 UNIX系统 IPC的最古老的形式,所有的UNIX系统都提供此种通信。所谓的88娱乐正规网址,也就是内核里面的一串缓存,从88娱乐正规网址的一段写入的数据,实际上是缓存在内核中的,令一端读取,也就是从内核中读取这段数据。对于88娱乐正规网址传输的数据是无格式的流且大小受限。对于88娱乐正规网址来说,也分为博天堂918网址体育真人和博天堂918网址,其中博天堂918网址也被叫做 FIFO,下面则分别阐述这两种88娱乐正规网址。

博天堂918网址体育真人

默认情况下,在 Shell命令执行过程中,任何一个命令都有一个标准输入设备(键盘)、标准输出设备(显示器)和标准输出设备(显示器),使用88娱乐正规网址"|"可以将两个命令连接起来,从而改变标准的输入输出方式,下面是在 88娱乐正规网址 端运行命令行的一个截图:

image-20210704161819420

上述命令中的意思也就是,将ls命令得到的结果作为grep tags命令的输入。

image-20210704162803903

连接输入输出的中间设备即为一个88娱乐正规网址文件,综上,也就是说使用88娱乐正规网址可以将一个命令的输出作为另一个命令的输入(在运行的时候,一个命令将创建一个进程),而这种88娱乐正规网址是临时的,命令执行完毕之后就会自动消失,这类88娱乐正规网址称为无名88娱乐正规网址。

博天堂918网址老虎机

博天堂918网址体育真人在使用前要先创建,其函数的声明如下:

 extern int pipe (int __pipedes[2]);  

此函数的参数是一个整型数组,如果执行成功,pipe 将存储两个整型文件描述符于__pipedes[0]__pipedes[1]中,他们分别指向88娱乐正规网址的两端。如果系统调用失败,则返回 -1。

读无名88娱乐正规网址,该函数的声明如下:

 extern ssize_t read (int __fd, void *__buf, size_t __nbytes);  

第一个参数fd为打开的文件描述符,buf为读出数据的存储位置,nbytes为读取数据的大小,调用 read 函数将从 fd 指向的文件描述符指定的打开文件中宏读n 字节到buf 指向的缓冲区内。

如果试图向已经填满的88娱乐正规网址写入,系统会自动阻塞。一个88娱乐正规网址不能同时被两个进程打开。

 extern ssize_ t write(int __fd, __const void *__buf, size_t __n);  

buf指向的缓冲区中向88娱乐正规网址中写入nbytes字节,且每次写入的内容都附件在88娱乐正规网址的末端。

那要如何使用88娱乐正规网址在两个进程之间通信呢,我们可以使用fork()创建子进程,创建的子进程会复制父进程的文件描述符,这样就做到了两个进程各有两个fd[0]与fd[1],两个进程就可以通过各自的fd写入和读取同一个88娱乐正规网址文件实现进程通信了,具体原理如下所示:

image-20210704170602297

具体的例子如下所示:

 #include #include #include int main(int argc, char *argv[]) {     pid_t pid;     int temp;     int pipedes[2];     char s[14] = "test message!";     char d[14];     if (pipe(pipedes) == -1) // 创建88娱乐正规网址     {         perror("pipe");         exit(EXIT_FAILURE);     }     if (pid == fork() == -1)     {         perror("fork");         exit(EXIT_FAILURE);     }     else if (pid == 0)      // 子进程     {         printf("now,write data to pipen");         if (write(pipedes[1], s, 14) == -1)   // 写数据到88娱乐正规网址         {             perror("write");             exit(EXIT_FAILURE);         }         else         {             printf("the written data is:%sn",s);             exit(EXIT_SUCESS);         }     }     else if (pid > 0)     // 父进程     {         slepp(2);         printf("now, read from pipen");         if ((read(pipedes[0], d, 14)) == -1)         {             perror("read");             exit(EXIT_FAILURE);         }         printf("the data from pipe is:%sn",d);     }     return 0; }     

代码运行的结果如下所示:

image-20210704172243185

博天堂918网址

博天堂918网址又被称之为是 FIFO ,未命名的88娱乐正规网址只能在两个相关的进程之间使用,而且这两个相关的进程还要又一个共同创建了他们的祖先进程,但是,通过 FIFO ,不相关的进程也能交换数据。

首先,介绍下是如何创建博天堂918网址的:

 extern int mkfifo (__const char *__path, __mode_t __mode);  

mkfifo会根据参数建立特殊的有名88娱乐正规网址文件,该文件必须不存在,而参数mode为该文件的权限。

下面是一个使用博天堂918网址进行进程间通信的例子,例子分为两个程序,分别是读部分和写部分,首先看先往88娱乐正规网址写数据的代码,代码如下所示:

 #include  #include  #include  #include  #include  #include  int main()  {      int fd;      // FIFO file path      char * myfifo = "/tmp/myfifo";      // Creating the named file(FIFO)      // mkfifo(,)      mkfifo(myfifo, 0666);      char arr1[80], arr2[80];      while (1)      {          // Open FIFO for write only          fd = open(myfifo, O_WRONLY);          printf("The fd is:%dn",fd);         // Take an input arr2ing from user.          // 80 is maximum length          fgets(arr2, 80, stdin);          // Write the input arr2ing on FIFO          // and close it          write(fd, arr2, strlen(arr2)+1);          close(fd);          // Open FIFO for Read only          fd = open(myfifo, O_RDONLY);          // Read from FIFO          read(fd, arr1, sizeof(arr1));          // Print the read message          printf("User2: %s", arr1);          close(fd);      }      return 0;  }          

然后是先往88娱乐正规网址读数据的代码,代码如下所示:

 #include  #include  #include  #include  #include  #include  int main()  {      int fd1;      // FIFO file path      char * myfifo = "/tmp/myfifo";      char str1[80], str2[80];      while (1)      {          // First open in read only and read          fd1 = open(myfifo,O_RDONLY);          printf("The fd is:%dn",fd1);         read(fd1, str1, 80);          // Print the read string and close          printf("User1: %s", str1);          close(fd1);          // Now open in write mode and write          // string taken from user.          fd1 = open(myfifo,O_WRONLY);          fgets(str2, 80, stdin);          write(fd1, str2, strlen(str2)+1);          close(fd1);      }      return 0;  }        

下面是代码运行的一个结果:

image-20210706132916572

说明一下,就是说当运行write程序的时候,会创88娱乐正规网址建fifo文件,博天堂918网址,然后,在write文件中就执行open操作,但是,这里存在的一个问题就是,因为在运行write程序的时候,没有进程打开读端,也就阻塞了open函数的运行,只有运行read操作,以读的方式读取88娱乐正规网址的数据,这样才能使得write中的open函数继续执行。

综上,也就是博天堂918网址在进程中通信的一个例子。

小结

上述就是本次进程通信中关于88娱乐正规网址的相关内容,其中就包括博天堂918网址体育真人以及博天堂918网址,他们之间存在着差别吗,也各有各的应用,本次的分享就到这里啦~

博天堂918网址

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
HFBR-1522 1 Avago Technologies FIBER OPTIC TRANSMITTER, 5Mbps, THROUGH HOLE MOUNT
$13.86 查看
PC357N1J000F 1 Sharp Corp Transistor Output Optocoupler, 1-Element, 3750V Isolation, ROHS COMPLIANT, PLASTIC, MINI-FLAT-4

ECAD模型

下载ECAD模型
$0.65 查看
ECS-120-20-30B-DU-TR 1 ECS International Inc Parallel - Fundamental Quartz Crystal, 12MHz Nom, SMD, 4 PIN
$11.35 查看

博天堂918网址网页版

博天堂918网址彩票

在读硕士研究生,喜欢钻研嵌入式相关技术,热衷于写文章分享知识,不定期输出关于单片机, RTOS,信号处理等相关内容