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

网站建设英语要几级成都达洱狐网络科技有限公司

网站建设英语要几级,成都达洱狐网络科技有限公司,陈村网站建设,怎么查询公司的营业执照目录 1. 进程间通信介绍 1-1 进程间通信⽬的 1-2 进程间通信发展 1-3 进程间通信分类 2. 管道 3. 匿名管道 3-1 实例代码 3-2 ⽤ fork 来共享管道原理 3-3 站在⽂件描述符⻆度-深度理解管道​编辑 3-4 站在内核⻆度-管道本质​编辑 3-5 管道样例 3-5-1 测试管道读写 …

 

目录

1. 进程间通信介绍

1-1 进程间通信⽬的

1-2 进程间通信发展

1-3 进程间通信分类

2. 管道

3. 匿名管道

 3-1 实例代码

3-2 ⽤ fork 来共享管道原理

3-3 站在⽂件描述符⻆度-深度理解管道​编辑

 3-4 站在内核⻆度-管道本质​编辑

3-5 管道样例

3-5-1 测试管道读写

3-6 管道读写规则

3-7 管道特点

4. 命名管道

4-1 创建⼀个命名管道

4-2 匿名管道与命名管道的区别

4-3 命名管道的打开规则


1. 进程间通信介绍

1-1 进程间通信⽬的

数据传输:⼀个进程需要将它的数据发送给另⼀个进程
资源共享:多个进程之间共享同样的资源。
通知事件:⼀个进程需要向另⼀个或⼀组进程发送消息,通知它(它们)发⽣了某种事件(如进
程终⽌时要通知⽗进程)。
进程控制:有些进程希望完全控制另⼀个进程的执⾏(如Debug进程),此时控制进程希望能够
拦截另⼀个进程的所有陷⼊和异常,并能够及时知道它的状态改变。

1-2 进程间通信发展

管道
System V进程间通信
POSIX进程间通信

1-3 进程间通信分类

管道
匿名管道pipe
命名管道

2. 管道

什么是管道
管道是Unix中最古⽼的进程间通信的形式。
我们把从⼀个进程连接到另⼀个进程的⼀个数据流称为⼀个“管道”

3. 匿名管道

#include <unistd.h>
功能:创建⼀⽆名管道
原型
int pipe(int fd[2]);
参数
fd:⽂件描述符数组,其中fd[0]表⽰读端, fd[1]表⽰写端
返回值:成功返回0,失败返回错误代码

 3-1 实例代码

例⼦:从键盘读取数据,写⼊管道,读取管道,写到屏幕
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main( void )
{
int fds[2];
char buf[100];
int len;
if ( pipe(fds) == -1 )
perror("make pipe"),exit(1);
// read from stdin
while ( fgets(buf, 100, stdin) ) {
len = strlen(buf);
// write into pipe
if ( write(fds[1], buf, len) != len ) {
perror("write to pipe");
break;
}
memset(buf, 0x00, sizeof(buf));// read from pipe
if ( (len=read(fds[0], buf, 100)) == -1 ) {
perror("read from pipe");
break;
}// write to stdout
if ( write(1, buf, len) != len ) {
perror("write to stdout");
break;
}
}
}

3-2 ⽤ fork 来共享管道原理

3-3 站在⽂件描述符⻆度-深度理解管道

 3-4 站在内核⻆度-管道本质

所以,看待管道,就如同看待⽂件⼀样!管道的使⽤和⽂件⼀致,迎合了“Linux⼀切皆⽂件思
想”。

3-5 管道样例

3-5-1 测试管道读写
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>
#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)
int main(int argc, char *argv[])
{
int pipefd[2];
if (pipe(pipefd) == -1)
ERR_EXIT("pipe error");
pid_t pid;
pid = fork();
if (pid == -1)
ERR_EXIT("fork error");
if (pid == 0) {
close(pipefd[0]);
write(pipefd[1], "hello", 5);
close(pipefd[1]);
exit(EXIT_SUCCESS);
}
close(pipefd[1]);
char buf[10] = {0};
read(pipefd[0], buf, 10);
printf("buf=%s\n", buf);
return 0;
}

3-6 管道读写规则

当没有数据可读时
O_NONBLOCK disable:read调⽤阻塞,即进程暂停执⾏,⼀直等到有数据来到为⽌。
O_NONBLOCK enable:read调⽤返回-1,errno值为EAGAIN。
当管道满的时候
O_NONBLOCK disable: write调⽤阻塞,直到有进程读⾛数据
O_NONBLOCK enable:调⽤返回-1,errno值为EAGAIN
如果所有管道写端对应的⽂件描述符被关闭,则read返回0
如果所有管道读端对应的⽂件描述符被关闭,则write操作会产⽣信号SIGPIPE,进⽽可能导致
write进程退出
当要写⼊的数据量不⼤于PIPE_BUF时,linux将保证写⼊的原⼦性。
当要写⼊的数据量⼤于PIPE_BUF时,linux将不再保证写⼊的原⼦性。

3-7 管道特点

只能⽤于具有共同祖先的进程(具有亲缘关系的进程)之间进⾏通信;通常,⼀个管道由⼀个进
程创建,然后该进程调⽤fork,此后⽗、⼦进程之间就可应⽤该管道。
管道提供流式服务
⼀般⽽⾔,进程退出,管道释放,所以管道的⽣命周期随进程
⼀般⽽⾔,内核会对管道操作进⾏同步与互斥
管道是半双⼯的,数据只能向⼀个⽅向流动;需要双⽅通信时,需要建⽴起两个管道

4. 命名管道

管道应⽤的⼀个限制就是只能在具有共同祖先(具有亲缘关系)的进程间通信。
如果我们想在不相关的进程之间交换数据,可以使⽤FIFO⽂件来做这项⼯作,它经常被称为命名
管道。
命名管道是⼀种特殊类型的⽂件

 

4-1 创建⼀个命名管道

命名管道可以从命令⾏上创建,命令⾏⽅法是使⽤下⾯这个命令: mkfifo filename
命名管道也可以从程序⾥创建,相关函数有: int mkfifo ( const char *filename, mode_t mode);
创建命名管道:
int main(int argc, char *argv[])
{
mkfifo("p2", 0644);
return 0;
}

4-2 匿名管道与命名管道的区别

匿名管道由pipe函数创建并打开。
命名管道由mkfifo函数创建,打开⽤open
FIFO(命名管道)与pipe(匿名管道)之间唯⼀的区别在它们创建与打开的⽅式不同,⼀但这些
⼯作完成之后,它们具有相同的语义。

4-3 命名管道的打开规则

如果当前打开操作是为读⽽打开FIFO时
O_NONBLOCK disable:阻塞直到有相应进程为写⽽打开该FIFO
O_NONBLOCK enable:⽴刻返回成功
如果当前打开操作是为写⽽打开FIFO时
O_NONBLOCK disable:阻塞直到有相应进程为读⽽打开该FIFO
O_NONBLOCK enable:⽴刻返回失败,错误码为ENXIO
实例1. ⽤命名管道实现⽂件拷⻉
读取⽂件,写⼊命名管道
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <string.h>#define ERR_EXIT(m) \
do \
{ \
perror(m); \
exit(EXIT_FAILURE); \
} while(0)int main(int argc, char *argv[])
{
mkfifo("tp", 0644);
int infd;
infd = open("abc", O_RDONLY);
if (infd == -1) ERR_EXIT("open");
int outfd;
outfd = open("tp", O_WRONLY);
if (outfd == -1) ERR_EXIT("open");
char buf[1024];
int n;
while ((n=read(infd, buf, 1024))>0)
{
write(outfd, buf, n);
}
close(infd);
close(outfd);
return 0;
}

http://www.dtcms.com/wzjs/68027.html

相关文章:

  • 惠州定制网站制作推荐南京网站制作
  • 网站建设策划案怎么写个人网站制作教程
  • 怎么做自己下单的网站seo综合查询怎么用的
  • .cc后缀网站免费模式营销案例
  • 网站建设规划书毕业论文6000字郑州网络推广哪家口碑好
  • 北京建站公司做网站价格解封后中国死了多少人
  • 网站设计论文参考文献各大搜索引擎入口
  • 零食网站建设策划书如何优化培训体系
  • 北京市住房与城乡建设委员会网站电子商务网站设计方案
  • 自己网站做问卷调查seo外链建设方法
  • 给公司做网站诈骗常用的网络营销工具
  • 用muse做网站整站优化seo
  • 网站鉴赏2023网站推广入口
  • 寻找郑州网站建设公司怎么提交网址让百度收录
  • 做网站 简单外包广州最新政策
  • 自己想申请一个公司优化大师官网下载
  • 政府网站建设背景网站推广软件下载安装免费
  • 营销型网站建设主要步骤百度推广seo怎么学
  • 简述网站开发设计流程图网络营销的特点主要包括什么
  • 网站论坛制作seo是搜索引擎营销
  • 做网站建设公司五种网络营销推广方法
  • 自助建站网站哪个好上海网络优化seo
  • 短视频推广的好处青岛seo霸屏
  • 网站建设优化服务方案模板厦门人才网官方网站
  • 小米14系列发布会微博手机影像年班级优化大师简介
  • 房产手机网站开发下载一个百度时事新闻
  • 北京做企业网站的公司培训师资格证怎么考
  • 建网站申请长沙网站se0推广优化公司
  • 上海网站建设公司怎么样百度广告怎么投放多少钱
  • 宣城网站 建设深圳百度推广客服电话多少