热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Linux打不开微信,Linux:进程间通信

一般的Linux进程间通信的方法:pipesocketsharedmemoryFIFOMessageQueueSemaphoresSharedMemoryAndroi

一般的Linux进程间通信的方法:pipe

socket

shared memory

FIFO

Message Queue

Semaphores

Shared Memory

Android另外还有Binder等,也是用的shared memory机制。这有专门的说明,这里就不多说了。

pipe

pipe只能用于有同一个父进程的进程之间,或者在父进程和子进程之间进行通信。#include int pipe(int filedes[2]);

filedes[0] 由于读,fields[1]则被用于写。

下面看一个例子&#xff1a;#include "apue.h"intmain(void){ int n; int fd[2]; pid_t pid; char line[MAXLINE]; if (pipe(fd) <0)//打开一个pipe err_sys("pipe error"); if ((pid &#61; fork()) <0) { err_sys("fork error"); } else if (pid > 0) { /* parent */ close(fd[0]);//父进程中&#xff0c;由于没有读的&#xff0c;就先关闭读的Pipe write(fd[1], "hello world\n", 12);//fd[1]可以用于写&#xff0c;所以往这个pipe中写内容 } else { /* child */ close(fd[1]);//子进程没有写&#xff0c;只读。所以可以把fd[1]先关掉 n &#61; read(fd[0], line, MAXLINE);//读fd[0]。 write(STDOUT_FILENO, line, n); } exit(0);}

e699793ae6ac996f5c04b7e4f5cbb346.png

FIFO

FIFO可以用于两个不相干的进程间的通信。#include int mkfifo(const char *pathname, mode_t mode);//pathname指定用于FIFO的文件的完整路径&#xff0c;

打开之后&#xff0c;就可以打开pathname对应的文件&#xff0c;对其进行写和读了。下面看一个例子&#xff1a;

Server程序&#xff1a;// fifo.c#include #include #include #include #include #include #include #include #define FIFO "/tmp/fifo.temp1"#define MAXLINE 1024int main(void) { int fifo, fd; char buf[MAXLINE]; int len; fd_set set; struct timeval tv; int i &#61; 0; unlink(FIFO); //如果FIFO存在&#xff0c;就先删除 if ((fifo &#61; mkfifo(FIFO, O_RDWR)) <0) //产生一个有名管道 { printf("mkfifo error: %s/n", strerror(errno)); return(0); } if ((fd &#61; open(FIFO, O_RDWR)) <0) //读写打开有名管道 { printf("open error: %s/n", strerror(errno)); return(0); } FD_ZERO(&set); FD_SET(fd, &set); tv.tv_sec &#61; 5; tv.tv_usec &#61; 0; //超时设置&#xff0c;超过5秒没有信息&#xff0c;就打印超时 while (1) { FD_SET(fd, &set); if ((i &#61; select(fd &#43; 1, &set, NULL, NULL, &tv)) > 0)//检测管道是否信息 { printf("receive data/n"); if (FD_ISSET(fd, &set)) { len &#61; read(fd, buf, MAXLINE);//读取信息 buf[len] &#61; &#39;/0&#39;; printf("buf &#61; %s/n", buf); tv.tv_sec &#61; atoi(buf); tv.tv_usec &#61; 0; } } else if (i &#61;&#61; 0) { tv.tv_sec &#61; 5; tv.tv_usec &#61; 0; printf("chaoshi/n"); } else printf("error/n"); } unlink(FIFO); //删除有名管道 return(0); }

Client程序&#xff1a;//fifo_cli.c#include #include #include #include #include #include #define FIFO "/tmp/fifo.temp1"#define MAXLINE 1024int main(void) { int fifo; char buf[MAXLINE]; int len; int i &#61; 0; strcpy(buf, "10"); if ((fifo &#61; open(FIFO, O_RDWR)) <0) //读写打开有名管道 { printf("mkfifo error: %s/n", strerror(errno)); return(0); } while (i <10) { sprintf(buf, "%d", i &#43; 1); len &#61; write(fifo, buf, strlen(buf)); //写入信息到管道中 printf("send len &#61; %d/n", len); sleep(i); i&#43;&#43;; } return(0); }

编译运行&#xff1a;

&#xff03;gcc -o fifo fifo.c

&#xff03;gcc -o fifo_cli fifo_cli.c

先运行./fifo&#xff0c;在运行./fifo_cli

程序效果&#xff1a;

fifo_cli将信息通过管道发送给fifo,fifo将信息显示出来。fifo_cli发送10次信息&#xff0c;即0、1、2 ….. 9

fifo接受后可以显示&#xff0c;显示10次以后无数据接受&#xff0c;显示“chaoshi”&#xff0c;需要用kill命令删除进程。

待续…



推荐阅读
  • 本文提出了一种基于栈结构的高效四则运算表达式求值方法。该方法能够处理包含加、减、乘、除运算符以及十进制整数和小括号的算术表达式。通过定义和实现栈的基本操作,如入栈、出栈和判空等,算法能够准确地解析并计算输入的表达式,最终输出其计算结果。此方法不仅提高了计算效率,还增强了对复杂表达式的处理能力。 ... [详细]
  • 深入解析C语言中结构体的内存对齐机制及其优化方法
    为了提高CPU访问效率,C语言中的结构体成员在内存中遵循特定的对齐规则。本文详细解析了这些对齐机制,并探讨了如何通过合理的布局和编译器选项来优化结构体的内存使用,从而提升程序性能。 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 在 Linux 环境下,多线程编程是实现高效并发处理的重要技术。本文通过具体的实战案例,详细分析了多线程编程的关键技术和常见问题。文章首先介绍了多线程的基本概念和创建方法,然后通过实例代码展示了如何使用 pthreads 库进行线程同步和通信。此外,还探讨了多线程程序中的性能优化技巧和调试方法,为开发者提供了宝贵的实践经验。 ... [详细]
  • 今天我开始学习Flutter,并在Android Studio 3.5.3中创建了一个新的Flutter项目。然而,在首次尝试运行时遇到了问题,Gradle任务 `assembleDebug` 执行失败,退出状态码为1。经过初步排查,发现可能是由于依赖项配置不当或Gradle版本不兼容导致的。为了解决这个问题,我计划检查项目的 `build.gradle` 文件,确保所有依赖项和插件版本都符合要求,并尝试更新Gradle版本。此外,还将验证环境变量配置是否正确,以确保开发环境的稳定性。 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • [Offer收割]编程竞赛第8轮 A 小Ho的完美主义倾向
    题目链接:小Ho的完美主义倾向题目描述:小Ho在一条直线型的街道上漫步。这条街道由若干块长度为L的石板铺设而成,因此每隔L的距离就会出现一道石板间的接缝。小Ho对这些规律排列的接缝产生了浓厚的兴趣,他决定研究如何在这条街道上行走,以满足自己对完美路径的追求。本题要求在给定的约束条件下,计算出小Ho能够实现其目标的所有可能方案数。 ... [详细]
  • WinMain 函数详解及示例
    本文详细介绍了 WinMain 函数的参数及其用途,并提供了一个具体的示例代码来解析 WinMain 函数的实现。 ... [详细]
  • Halcon之图像梯度、图像边缘、USM锐化
    图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像梯度、图像边缘、USM锐化图像卷积:1.模糊2.梯度3.边缘4.锐化1.视频教程:B站、 ... [详细]
  • window下的python安装插件,Go语言社区,Golang程序员人脉社 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 利用树莓派畅享落网电台音乐体验
    最近重新拾起了闲置已久的树莓派,这台小巧的开发板已经沉寂了半年多。上个月闲暇时间较多,我决定将其重新启用。恰逢落网电台进行了改版,回忆起之前在树莓派论坛上看到有人用它来播放豆瓣音乐,便萌生了同样的想法。通过一番调试,终于实现了在树莓派上流畅播放落网电台音乐的功能,带来了全新的音乐享受体验。 ... [详细]
  • 在牛客2021多校竞赛的一道题目中,涉及了5000×5000×5000的复杂度计算。实验结果显示,使用bitset进行数据处理仅需140毫秒,而使用bool数组则显著较慢。本文通过详细的性能分析,探讨了bitset与bool在数据处理速度上的差异,并提出了针对不同应用场景的优化建议。具体来说,bitset在位级操作上具有更高的效率,适用于大规模数据处理任务,而bool数组则在某些特定场景下更为灵活。通过对这两种数据结构的深入对比,本文旨在为开发者提供选择合适数据结构的参考依据。 ... [详细]
  • Codeforces 1065D 解题心得与代码实现分析 ... [详细]
author-avatar
缘zhi韵_297
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有