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

怎么给网站做跳转设计娱乐网站

怎么给网站做跳转,设计娱乐网站,做网站高亮,汕尾建设局安检站网站关于进程间的通信 Linux进程间通信#xff08;Inter-Process Communication#xff0c;IPC#xff09;是指在多个进程之间传输数据或信号的一些方法。由于Linux中的进程有各自独立的地址空间#xff0c;因此它们不能直接访问对方的内存。为了实现进程间的通信#xff0c;…关于进程间的通信 Linux进程间通信Inter-Process CommunicationIPC是指在多个进程之间传输数据或信号的一些方法。由于Linux中的进程有各自独立的地址空间因此它们不能直接访问对方的内存。为了实现进程间的通信Linux提供了多种机制管道信号消息队列共享内存网络 Linux下的进程通信手段基本上是从Unix平台上继承而来的 进程间通讯分为单个计算机的进程间通讯和局域网的进程间通讯 管道 管道简介 管道是一种最基本的IPC机制它允许一个进程的输出成为另一个进程的输入。管道是半双工的数据只能向一个方向流动 管道的本质是操作系统内核提供的一种进程间通信机制它通过内核缓冲区和文件描述符来实现进程间的数据交换和同步 管道分为无名管道与有名管道 一.无名管道 无名管道的特点: 无名管道只能实现单向通信数据只能从一端流向另一端 无名管道通常用于父子进程之间的通信因为它们需要在创建时就确定通信的两端 无名管道没有名字它们在文件系统中不可见仅在创建它们的进程及其子进程的生命周期内存在。 无名管道将读端与写端抽象成两个文件进行操作在无名管道创建成功之后则会返回将读端与写端的文件描述符存入数组 创建无名管道 pipe()函数 函数描述pipe()创建了一个管道这是一种单向数据通道可用于进程间通信。数组 pipefd 用于返回指向管道两端的两个文件描述符。pipefd[0]指向管道的读端pipefd[1] 指向管道的写端。写入管道写端的数据将由内核缓冲直到从管道读端读取。 函数头文件 #include unistd.h 功能 管道创建之后内核会将文件描述符存储到数组 函数原型 int pipe(int pipefd[2]);函数参数 pipefd:用于存储无名管道读端与写端的文件描述符的数组 pipefd[0]:读端文件描述符 pipefd[1]:写端文件描述符 函数返回值: 成功:0 失败:-1,设置 errno,同时将pipefd保持不变 示例代码 #include stdio.h #include sys/types.h #include unistd.h #include sys/types.h #include sys/wait.h #include errno.h #include stdlib.h #include string.hint main() {int pipefd[2];int numpipe(pipefd);if(num -1){perror(pipe\n);exit(EXIT_FAILURE);}pid_t pid fork(); // 创建子进程if (pid -1){perror(fork failed);return 1;}else if (pid 0){close(pipefd[1]);char buffer[64];size_t rbytes read(pipefd[0],buffer,sizeof(buffer));if(rbytes -1){perror(read fail\n);close(pipefd[0]);}else{printf(read : %s\n,buffer);close(pipefd[0]);}}else{close(pipefd[0]);char buf[128]{0};printf(please to input information\n);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]\0;size_t wbytes write(pipefd[1],buf,sizeof(buf));if(wbytes-1){perror(write fail\n);close(pipefd[1]);}else{printf(wbytes %ld\n,wbytes);close(pipefd[1]);}}waitpid(-1,NULL,0);return 0; }代码解读 使用pipe函数创建一个无名管道并将文件描述符数组pipefd的两个元素分别设置为管道的读端和写端。如果创建失败打印错误信息并退出 调用fork函数创建子进程。如果fork失败打印错误信息并返回1。 如果pid为0说明当前是子进程。关闭管道的写端文件描述符。 定义一个字符数组buffer用于存储从管道读取的数据。 从管道的读端读取数据到buffer。如果读取失败打印错误信息并关闭读端文件描述符。如果读取成功打印读取的内容并关闭读端文件描述符。 如果pid不为0说明当前是父进程。关闭管道的读端文件描述符。 定义一个字符数组buf用于存储用户输入的数据。 将用户输入的数据写入管道的写端。如果写入失败打印错误信息并关闭写端文件描述符。如果写入成功打印写入的字节数并关闭写端文件描述符。 调用waitpid函数等待子进程结束。-1表示等待任意子进程NULL表示不需要子进程的终止状态0表示不设置任何选项。 二.有名管道 有名管道的特点 有名管道在文件系统中以文件的形式存在但不占用磁盘空间即使创建它的进程已经退出有名管道仍然存在直到被显式删除。 有名管道允许任何知道管道名称的进程进行通信 有名管道提供了一种同步机制写入操作在管道有足够空间时才会成功读取操作在管道中有数据时才会成功 创建有名管道 mkfifo命令 mkfifo [选项]... 名字 -m 或 --mode模式设置创建的有名管道的权限。如果不设置将使用默认的权限通常是 0666即允许所有用户读写。-p 或 --fifo路径指定有名管道的路径。如果路径不存在mkfifo 会创建它。 mkfifo()系统调用 函数描述 mkfifo()创建一个名为pathname的FIFO特殊文件。mode指定FIFO的权限。它由进程的umask以通常的方式修改:创建的文件的权限是(mode ~umask)。 FIFO特殊文件类似于管道只是其创建方式不同。通过调用mkfifo()将FIFO特殊文件输入到文件系统中而不是作为匿名通信通道。 一旦你以这种方式创建了一个FIFO特殊文件任何进程都可以打开它进行读写就像普通文件一样。但是在您可以对其进行任何输入或输出操作之前它必须同时在两端打开。为读打开FIFO通常会阻塞直到其他进程为写打开相同的FIFO反之亦然。 函数头文件 #include sys/types.h #include sys/stat.h函数原型: int mkfifo(const char *pathname, mode_t mode);函数参数: pathname:有名管道路径名 mode:有名管道文件访问权限, 常用0644函数返回值: 成功:返回0 失败:返回-1,并设置errno 示例代码: 进程A: #include unistd.h #include sys/types.h #include sys/wait.h #include errno.h #include stdlib.h #include string.h #include sys/stat.h #include fcntl.h #define PATH /home/linux/namepipe int main() {int fr open(PATH,O_RDONLY);if(fr-1){perror(open fail);exit(EXIT_FAILURE);}char buffer[128];ssize_t rbytes read(fr,buffer,sizeof(buffer));if(rbytes-1){perror(read fail);close(fr);exit(EXIT_FAILURE);}printf(rbytes%ld buffer%s\n,rbytes,buffer);close(fr);return 0; } 进程B: #include stdio.h #include sys/types.h #include errno.h #include stdlib.h #include string.h #include unistd.h #include sys/stat.h #include fcntl.h#define PATH_NAME /home/linux/npipe int main() {int result access(PATH_NAME,F_OK);if(result -1){int ret mkfifo(PATH_NAME,0666);if(ret-1){perror(mkfifo:);exit(EXIT_FAILURE);}}int fw open(PATH_NAME,O_WRONLY);if(fw-1){perror(open:);exit(EXIT_FAILURE);}char buf[128]{0};printf(please to enter\n);fgets(buf,sizeof(buf),stdin);buf[strlen(buf)-1]\0;ssize_t wbytes write(fw,buf,sizeof(buf));if(wbytes-1){perror(write:);close(fw);exit(EXIT_FAILURE);}printf(wbytes%ld buf%s\n,wbytes,buf);close(fw);return 0; }代码解读 进程B: 用于从有名管道FIFO中写入数据 定义有名管道的路径宏PATH_NAME。 使用access函数检查有名管道是否存在。F_OK是access函数的参数用于检查文件是否存在。 如果有名管道不存在使用mkfifo函数创建它。如果创建失败使用perror打印错误信息然后退出程序。 以只写模式O_WRONLY打开有名管道。如果打开失败使用perror打印错误信息然后退出程序。 定义一个字符数组buf用于存储用户输入的数据。 使用fgets函数从标准输入读取一行数据到buf。fgets会读取直到换行符或缓冲区满但不包括换行符。 将buf数组中的最后一个字符换行符替换为字符串结束符\0。 使用write函数将用户输入的数据写入有名管道。如果写入失败使用perror打印错误信息关闭文件描述符fw然后退出程序。 关闭文件描述符fw。 进程A: 用于从有名管道FIFO中读取数据 使用open函数以只读模式O_RDONLY打开有名管道。如果打开失败open函数返回-1。 如果open函数失败使用perror打印错误信息然后退出程序。 定义一个字符数组buffer用于存储从有名管道读取的数据。 使用read函数从有名管道中读取数据到buffer。如果读取失败read函数返回-1。 如果read函数失败使用perror打印错误信息关闭文件描述符fr然后退出程序。 关闭文件描述符fr。 结语 无论你是初学者还是有经验的开发者我希望我的博客能对你的学习之路有所帮助。如果你觉得这篇文章有用不妨点击收藏或者留下你的评论分享你的见解和经验也欢迎你对我博客的内容提出建议和问题。每一次的点赞、评论、分享和关注都是对我的最大支持也是对我持续分享和创作的动力
http://www.w-s-a.com/news/499719/

相关文章:

  • wordpress改网站名字长沙网络营销外包
  • 宝塔怎么做第二个网站网站内容设计遵循的原则有
  • 网站违反了 google 质量指南免费ppt模版网站
  • 郑州网站建设郑州网站建设成都那家网站建设好
  • 温州网站排名优化公司如何招聘软件网站开发人员
  • 成都 网站建设公司哪家好襄阳行业网站建设
  • wordpress 调用时间做网站seo的公司哪家好
  • 手机上网站搭建网站账户系统
  • 西乡网站的建设柳州建站
  • 宁夏网站建设怎么样互联网 网站设计
  • 成都关键词seo推广平台手机端关键词排名优化软件
  • 学做软件的网站卡盟平台
  • 网站构建建设案例展示关于做服饰网站的首页
  • 如何建设网站论坛凡科建站手机版登录
  • 建设银行门户网站惠州公司网站建设价格
  • 用python开发网站网站如何取消验证码
  • 公司做企业网站互联网建网站
  • 建网站需要的费用公司注册后怎么做网站
  • 宣传电脑的网站开发运动网站建设教程
  • 网站建设公司都会有哪些花销做网站公司商丘
  • 网站风格有哪些软件定制和开发
  • 公司网络维护具体做什么河南网站推广优化公司哪家好
  • 中学生制作的网站常平哪里有招计算机网站开发的
  • 原创网站模版苏州响应式网站建设
  • 做海报在哪个网站可以找素材网址申请注册方法
  • 网站建设分哪些类别别人做的网站不能用
  • 做网站网站会怎么样全国高校校园网站联盟建设
  • 整站下载器 做网站地图地产项目网站设计
  • 创意设计网站公司手机wap网站建设多少钱
  • 甘肃省第八建设集团公司网站seo高级优化方法