当前位置: 首页 > news >正文

5星做号宿水软件的网站广丰网站seo

5星做号宿水软件的网站,广丰网站seo,做微信公众号网站源码,平台网站建设外包前面学习过(匿名)管道(见前面博客),匿名管道只能用于有亲缘关系的各个进程之间,为了解决这个限制,UNIX系统进而引入了FIFO,也称为有名管道(named pipe)。 FI…

前面学习过(匿名)管道(见前面博客),匿名管道只能用于有亲缘关系的各个进程之间,为了解决这个限制,UNIX系统进而引入了FIFO,也称为有名管道(named pipe)。

FIFO(first in, first out),是一个半双工数据流,也即一个半双工管道。不同于匿名管道的是,每个FIFO有一个路径名(或文件名)与之关联,也即FIFO的名字。有了名字,无亲缘关系的进程间就可以通过管道进行数据传输了。

创建FIFO的方式:

  • 使用shell命令 mkfifo创建一个有名管道
  • 使用C库函数mkfifo创建一个有名管道

使用shell命令 mkfifo创建一个有名管道

1[infor@s123 FIFO]$ mkfifonpipe
2[infor@s123 FIFO]$ ls-l
3prw-r--r--  1 infor app 0 Nov 13 11:32 npipe

上面我们创建了一个有名管道npipe,我们可以看到有名管道其实是一个文件,文件类型是“p”,管道类型。

我们在开启两个终端,分别为A和B。在A终端下将数据写入管道,在B终端下将数据读出来。

1[infor@s123 FIFO]$ ping10.4.123.124 >> npipe
2#会阻塞在这里,等待另一个进程读

在终端A下将ping的结果写入管道npipe,这里会一直阻塞到另一个进程将数据全部读出或中止读出。

1[infor@s123 FIFO]$ catnpipe
2PING 10.4.123.124 (10.4.123.124) 56(84) bytes of data.
364 bytes from 10.4.123.124: icmp_seq=0 ttl=128time=0.838 ms
464 bytes from 10.4.123.124: icmp_seq=1 ttl=128time=0.835 ms
564 bytes from 10.4.123.124: icmp_seq=2 ttl=128time=0.843 ms
664 bytes from 10.4.123.124: icmp_seq=3 ttl=128time=0.834 ms

在终端B下读取npipe。

使用C库函数mkfifo创建一个有名管道

1#include <sys/types.h>
2#include <sys/stat.h>
3/*
4函数说明:依参数pathname建立特殊的FIFO文件,该文件必须不存在,而参数mode为该文件的权限
5返回值:若成功则返回0,否则返回-1,错误原因存于errno中
6*/
7int mkfifo(const char *pathname, mode_t mode);

 对于创建方式,mkfifo隐含指定O_CREAT|O_EXCL,也即mkfifo创建一个新的FIFO,如果该FIFO已经存在,则会返回EEXIST错误。

对于参数mode可有如下选项:
S_IRUSR:当前用户可读
S_IWUSR:当前用户可写
S_IRGRP:组成员可读
S_IWGRP:组成员可写
S_IROTH:其他用户可读
S_IWOTH:其他用户可写

下面通过例子看下如何使用。

假如有这样一个案例。进程A执行完将执行结果写入管道,等待进程B将该结果读出。

01#include <stdio.h>
02#include <stdlib.h>
03#include <sys/types.h>
04#include <sys/stat.h>
05#include <unistd.h>
06#include <fcntl.h>
07#include <errno.h>
08 
09#define FIFO_NAME ("/tmp/fifo.1") // 设定FIFO的名字
10#define FILE_MODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) // 设定创建FIFO的权限
11 
12/*创建一个FIFO,等待另一个进程读取*/
13int main()
14{
15    intwritefd;
16    charstatus[] = "success";
17    size_tn = 0;
18 
19    // 创建FIFO
20    if(mkfifo(FIFO_NAME, FILE_MODE) < 0)
21    {
22        if(EEXIST ==errno)
23        {
24            printf("FIFO:%s已经存在,不能重新创建\r\n", FIFO_NAME);
25        }
26        else
27        {
28            perror("创建FIFO错误");
29            exit(1);
30        }
31    }
32 
33    // 打开FIFO
34    writefd = open(FIFO_NAME, O_WRONLY, 0);
35    if(-1 == writefd)
36    {
37        perror("打开FIFO失败");
38        unlink(FIFO_NAME);
39        exit(1);
40    }
41 
42    // 写入执行状态
43    n = write(writefd, status,strlen(status));
44    if(n !=strlen(status))
45    {
46        perror("写入FIFO失败");
47        unlink(FIFO_NAME);
48        exit(1);
49    }
50 
51    if(-1 == close(writefd))
52    {
53        perror("关闭FIFO失败");
54        unlink(FIFO_NAME);
55        exit(1);
56    }
57 
58    return0;
59}

编译并执行:
1[infor@s123 FIFO]$ gcc -o wnpipe wnpipe.c
2[infor@s123 FIFO]$ ./wnpipe
3#阻塞在这里等待另外一个进程读取FIFO

这里我们看一下/tmp/fifo.1 是否生成:

1[infor@s123 tmp]$ ls-l /tmp/fifo.1
2prw-r--r--  1 infor app 0 Nov 13 12:58 /tmp/fifo.1

我们看到FIFO文件已经生成。

01#include <stdio.h>
02#include <stdlib.h>
03#include <sys/types.h>
04#include <sys/stat.h>
05#include <unistd.h>
06#include <fcntl.h>
07#include <errno.h>
08 
09#define FIFO_NAME ("/tmp/fifo.1") // 设定FIFO的名字
10#define MAXLINE (1024)
11 
12/*读取FIFO内容*/
13int main()
14{
15    intreadfd;
16    charstatus[MAXLINE];
17    size_tn = 0;
18 
19    // 打开FIFO
20    readfd = open(FIFO_NAME, O_RDONLY, 0);
21    if(-1 == readfd)
22    {
23        perror("打开FIFO失败");
24        unlink(FIFO_NAME);
25        exit(1);
26    }
27 
28    // 读取FIFO
29    n = read(readfd, status, MAXLINE);
30    if(-1 == n)
31    {
32        perror("读取FIFO失败");
33        exit(1);
34    }
35 
36    printf("管道内容:%s\r\n", status);
37 
38    // 关闭FIFO
39    if(-1 == close(readfd))
40    {
41        perror("关闭FIFO失败");
42        unlink(FIFO_NAME);
43        exit(1);
44    }
45 
46    // 删除FIFO
47    unlink(FIFO_NAME);
48 
49    return0;
50}

编译并执行:

1[infor@s123 FIFO]$ gcc -o rnpipe rnpipe.c
2[infor@s123 FIFO]$ ./rnpipe
3管道内容:success

这里我们再看一下/tmp/fifo.1 是否还存在:

1[infor@s123 tmp]$ ls-l /tmp/fifo.1
2ls: /tmp/fifo.1: No suchfile or directory

http://www.lbrq.cn/news/2804257.html

相关文章:

  • 阳泉做网站多少钱百度天眼查
  • 网站报错500竞价什么意思
  • 巩义云启网站建设深圳网站制作公司
  • 服装租赁 网站 php杭州旺道企业服务有限公司
  • 西安个人建网站百度站长平台链接提交
  • 自己做网站的好处河池网站seo
  • 做网站建设优化的公司百度有钱花人工客服
  • 江西省赣州市崇义县搜狗整站优化
  • 企业网站建设的一般要素主要包括网站的seo资料站
  • 黑龙江头条今日新闻郑州好的seo外包公司
  • 社群营销的具体方法放心网站推广优化咨询
  • 可靠的网站建设案例社群营销策略有哪些
  • 网页源代码看答案怎么优化推广自己的网站
  • 网站备案登录密码找回北大青鸟培训机构靠谱吗
  • 360 网站备案百度收录哪些平台比较好
  • a站和b站的区别熊猫关键词工具官网
  • 北京网站制作武汉加盟
  • 建立个人网站用虚拟主机电商网站设计论文
  • 做wordpress 主题下载站精准营销方式有哪些
  • 微信与wordpress汽车seo是什么意思
  • 信息科技有限公司网站建设如何进行网络推广营销
  • 留言网站建设旺道seo优化
  • 猎头网站 做猎头的流程网站关键词推广价格
  • 做盗版电影网站犯法吗google优化师
  • 专业团队ppt模板苏州搜索引擎排名优化商家
  • 色和尙做爰网站谷歌seo是什么意思
  • 网页设计总结经验简阳seo排名优化培训
  • 做电影分享网站违法吗网推平台有哪些比较好
  • 网站的建设与维护需要资质吗百度小程序
  • 嘉兴做网站的公司四年级的简短新闻播报
  • 亚马逊老品怎么再次爆发流量?
  • 计算机视觉第一课opencv(三)保姆级教学
  • langgraph快速搭建agent后端和react前端
  • gRPC 与 HTTP 性能对比分析
  • 49 C++ STL模板库18-类模板-pair
  • 0基础安卓逆向原理与实践:第3章:逆向工程理论基础