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

网站建设 交易保障杭州江干区抖音seo哪里有

网站建设 交易保障,杭州江干区抖音seo哪里有,网站推广论坛,云谷 网站建设Linux C语言 39-进程间通信IPC之管道 本节关键字#xff1a;C语言 进程间通信 管道 FIFO 相关库函数#xff1a;pipe、mkfifo、mknod、write、read 什么是管道#xff1f; 管道通常指“无名管道”#xff0c;是Unix系统中最古老的IPC通信方式。 管道的分类 管道#…Linux C语言 39-进程间通信IPC之管道 本节关键字C语言 进程间通信 管道 FIFO 相关库函数pipe、mkfifo、mknod、write、read 什么是管道 管道通常指“无名管道”是Unix系统中最古老的IPC通信方式。 管道的分类 管道无名管道FIFO命名管道 管道的特点 管道无名管道 半双工数据只能由连接的一端发送到另一端并且读端和写端固定只能用于具有亲缘关系的进程通信如父子进程、兄弟进程可以当成一种特殊的文件不属于任何文件系统只存在于内存中。读写使用read()和write等函数管道有互斥功能同一时间只能有一个进程从管道读取数据。 FIFO命名管道 FIFO是一种文件类型有路径名以一种特殊设备文件形式存在于文件系统中FIFO可以在无关的进程之间交换数据这点与无名管道不同管道有互斥功能同一时间只能有一个进程从管道读取数据。 管道相关库函数 管道无名管道 #include unistd.h int pipe(int fd[2]); /** brief 创建管道需要手动关闭管道即手动关闭两个文件描述符 param fd 承接管道创建时的两个文件描述符fd[0]为读端描述符fd[1]为写端描述符 return 成功返回0失败返回-1并设置错误码error错误码error类型 EFAULT pipefd无效 EINVAL pipe2标志中的值无效 EMFILE 进程正在使用的文件描述符过多 ENFILE 打开文件总数已达到系统限制 */管道使用例程 // 管道使用例程创建管道和进程子进程读管道父进程写管道 #include sys/wait.h #include assert.h #include stdio.h #include stdlib.h #include unistd.h #include string.hint main(int argc, char *argv[]) {int pipefd[2];pid_t cpid;char buf;assert(argc 2); // 断言有一个命令行参数argv[1]将被写入管道if (pipe(pipefd) -1) {perror(pipe);exit(EXIT_FAILURE);}cpid fork();if (cpid -1) {perror(fork);exit(EXIT_FAILURE);}if (cpid 0) // 子进程关闭写文件描述符读管道{close(pipefd[1]);while (read(pipefd[0], buf, 1) 0)write(STDOUT_FILENO, buf, 1);write(STDOUT_FILENO, \n, 1);close(pipefd[0]);_exit(EXIT_SUCCESS);} else // 父进程关闭读文件描述符写管道将命令行参数argv[1]写入管道{close(pipefd[0]);write(pipefd[1], argv[1], strlen(argv[1]));close(pipefd[1]); // 读端将收到EOFwait(NULL); // 等待子进程退出exit(EXIT_SUCCESS);}return 0; }FIFO命名管道 #include sys/stat.h int mkfifo(const char *pathname, mode_t mode); /** brief 创建FIFO管道需要手动关闭管道即手动关闭文件描述符。FIFO特殊文件不是匿名通信通道而是通过调用mkfifo()输入到文件系统中 param pathname FIFO的路径名文件真实存在 param mode 创建FIFO文件的权限创建的文件的权限为mode~umask return 成功返回0失败返回-1并设置错误码error错误码error分类 EACCES 路径名中的一个目录没有搜索执行权限 EEXIST 路径名已存在。这包括路径名是符号链接的情况无论是否悬空 ENAMETOOLONG 路径名的总长度大于PATH_MAX或者单个文件名组件的长度大于NAME_MAX。在GNU系统中对文件名的总长度没有强制限制但一些文件系统可能会对组件的长度进行限制 ENOENT 路径名中的目录组件不存在或者是悬挂的符号链接 ENOSPC 目录或文件系统没有空间容纳新文件 ENOTDIR 在路径名中用作目录的组件实际上不是目录 EROFS 路径名是指只读文件系统Trip一旦你以这种方式创建了一个FIFO特殊文件任何进程都可以像普通文件一样打开它进行读取或写入。然而在您可以继续对其进行任何输入或输出操作之前它必须同时在两端打开。打开FIFO以正常读取块直到其他进程打开相同的FIFO进行写入反之亦然。有关fifo特殊文件的非阻塞处理请参见fifo7。 */FIFO使用例程 FIFO使用例程创建FIFO多个个服务端读多个个客户端写验证管道的互斥功能 FIFO使用服务端例程 // FIFO使用例程 服务端循环读取管道中的信息直到管道的所有写端关闭 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include fcntl.h #include sys/types.hint main(void) {char pathname[] ./myfifo;int ret, fd;char buffer[1024];umask(0);ret mkfifo(pathname, 0666); // mode附加读写权限fd open(pathname, O_RDONLY); // 服务端只读打开FIFO文件if (fd 0)return -1;for ( ; ; ){bzero(buffer, 0);ret read(fd, buffer, sizeof(buffer)-1);if (ret 0){printf(server recv: %s\n, buffer);fflush(stdout);}else if (ret 0){printf(server: client quit\n);break;}else{perror(server failed to read myfifo\n);break;}}close(fd);return 0; }FIFO使用客户端例程 // FIFO使用例程客户端将用户输入的信息写入管道循环执行6次退出 #include stdio.h #include stdlib.h #include string.h #include unistd.h #include fcntl.h #include sys/types.hint main(void) {char pathname[] ./myfifo;int ret, fd, cnt;char buffer[1024];fd open(pathname, O_WRONLY); // 客户端只写开打FIFO文件if (fd 0)return -1;do{printf(please input message: );fflush(stdout);bzero(buffer, 0);ret read(STDIN_FILENO, buffer, sizeof(buffer)-1);if (ret 0){perror(read);}else{write(fd, buffer, ret);}} while (cnt 5);close(fd);return 0; }运行结果 /// 从两个服务端的运行结果可知管道有互斥功能同一时刻只有一个进程可以从管道读取数据// 服务端1 $ ./fifoserver server recv: client1: 1server recv: client2: 1server recv: client1: 2server recv: client1: 3server recv: client1: 5server recv: client2: 4server recv: client2: 6server: client quit// 服务端2 $ ./fifoserver server recv: client1: 4server recv: client1: 6server recv: client2: 2server recv: client2: 3server recv: client2: 5server: client quit// 客户端1 $ ./fifoclient please input message: client1: 1 please input message: client1: 2 please input message: client1: 3 please input message: client1: 4 please input message: client1: 5 please input message: client1: 6// 客户端2 $ ./fifoclient please input message: client2: 1 please input message: client2: 2 please input message: client2: 3 please input message: client2: 4 please input message: client2: 5 please input message: client2: 6启动server后使用ll命令查看目录文件信息可以看到已经创建了myfifo文件
http://www.dnsts.com.cn/news/76909.html

相关文章:

  • 类似非小号的网站怎么做ui设计是什么需要美术功底吗
  • 装修行业 网站建设上海工程公司
  • 网站建设会议报道手机制作表白网站
  • 家庭网络如何做网站服务器常用企业网站模板对比
  • 网站建设 分类济南高新网站建设
  • 高端网站建设网页设计衣服货源怎么找厂家拿
  • 知识付费网站源码下载如何建立互联网公司网站
  • 专门做酒店网站成都发现6例阳性
  • 网站策划书怎么写一个主机多个网站
  • 做网站改变图片位置wordpress在后台文章自定义表单
  • 张家港手机网站网站关键词如何优化
  • wordpress主题视频站seo收费标准
  • 手机小游戏网站网站备案信息代码
  • 出名的网站有哪些株洲高端网站建设
  • 创建网站平台wordpress腾讯地图插件下载失败
  • 济南网站建设v芯企优互联不错wordpress注册邀请码
  • 济南网站建设联系方式济南美赞网站建设公司
  • 河南如何做网站全国网站设计排名
  • 网站蓝色专业提供网站建设服务公司
  • 芜湖建设网站公司任县网站建设价格信息
  • 芜湖做网站的公司结合七牛云 做视频网站
  • wordpress 点赞功能网络优化行业的发展前景
  • 如何选网站服务器网站引导动画
  • 友点企业网站管理系统忘记密码成安县城乡建设规划局网站
  • 专业提供建站模板的公司房产网站加盟
  • 江苏镇江网站建设装修公司网站模板
  • iis网站的建设北京 公司网站开发
  • 义乌国贸学校网站建设园林景观设计公司招聘
  • 春蕾科技 网站建设网站开发朋友圈
  • 安防公司手机网站网站备案查询不到