热门标签 | 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命令删除进程。

待续…



推荐阅读
  • 本文介绍了SPOJ2829题目的解法及优化方法。题目要求找出满足一定条件的数列,并对结果取模。文章详细解释了解题思路和算法实现,并提出了使用FMT优化的方法。最后,对于第三个限制条件,作者给出了处理方法。文章最后给出了代码实现。 ... [详细]
  • DescriptionclickmeSolution套路的状压期望DP题。。。考虑倒退期望:设fi,jrolepresentationstyleposi ... [详细]
  • 题面传送门Solution看到什么最大值最小肯定二分啊。check直接跑一个二分图匹配就好了。orzztl!!!代码实现*mail:mle ... [详细]
  • 本文内容为asp.net微信公众平台开发的目录汇总,包括数据库设计、多层架构框架搭建和入口实现、微信消息封装及反射赋值、关注事件、用户记录、回复文本消息、图文消息、服务搭建(接入)、自定义菜单等。同时提供了示例代码和相关的后台管理功能。内容涵盖了多个方面,适合综合运用。 ... [详细]
  • 本文介绍了解决二叉树层序创建问题的方法。通过使用队列结构体和二叉树结构体,实现了入队和出队操作,并提供了判断队列是否为空的函数。详细介绍了解决该问题的步骤和流程。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 李逍遥寻找仙药的迷阵之旅
    本文讲述了少年李逍遥为了救治婶婶的病情,前往仙灵岛寻找仙药的故事。他需要穿越一个由M×N个方格组成的迷阵,有些方格内有怪物,有些方格是安全的。李逍遥需要避开有怪物的方格,并经过最少的方格,找到仙药。在寻找的过程中,他还会遇到神秘人物。本文提供了一个迷阵样例及李逍遥找到仙药的路线。 ... [详细]
  • 本文介绍了Codeforces Round #321 (Div. 2)比赛中的问题Kefa and Dishes,通过状压和spfa算法解决了这个问题。给定一个有向图,求在不超过m步的情况下,能获得的最大权值和。点不能重复走。文章详细介绍了问题的题意、解题思路和代码实现。 ... [详细]
  • 本文介绍了在Android开发中使用软引用和弱引用的应用。如果一个对象只具有软引用,那么只有在内存不够的情况下才会被回收,可以用来实现内存敏感的高速缓存;而如果一个对象只具有弱引用,不管内存是否足够,都会被垃圾回收器回收。软引用和弱引用还可以与引用队列联合使用,当被引用的对象被回收时,会将引用加入到关联的引用队列中。软引用和弱引用的根本区别在于生命周期的长短,弱引用的对象可能随时被回收,而软引用的对象只有在内存不够时才会被回收。 ... [详细]
  • 本文介绍了一道经典的状态压缩题目——关灯问题2,并提供了解决该问题的算法思路。通过使用二进制表示灯的状态,并枚举所有可能的状态,可以求解出最少按按钮的次数,从而将所有灯关掉。本文还对状压和位运算进行了解释,并指出了该方法的适用性和局限性。 ... [详细]
  • linux进阶50——无锁CAS
    1.概念比较并交换(compareandswap,CAS),是原⼦操作的⼀种,可⽤于在多线程编程中实现不被打断的数据交换操作࿰ ... [详细]
  • C++ STL复习(13)容器适配器
    STL提供了3种容器适配器,分别为stack栈适配器、queue队列适配器以及priority_queue优先权队列适配器。不同场景下,由于不同的序列式 ... [详细]
  • 给出一群女孩的重量和颜值和她们的朋友关系现在有一个舞台ab是朋友bc是朋友ac就是朋友给出最大承重可以邀请这些女孩来玩对于每一个朋友团体全邀请or邀请一个or不邀请问能邀请的女孩的 ... [详细]
  • C语言 文件 看这一篇就够了
    码字不易,对你有帮助点赞转发关注支持一下作者微信搜公众号:不会编程的程序圆看更多干货,获取第一时间更新想看更好排版,可以看原 ... [详细]
  • 昨夜西风凋碧树,独上高楼,望尽天涯路。——五代晏殊蝶恋花最近学习了APUE的一系列函数,要求用ifconfig命令来获取本机的网卡ip&# ... [详细]
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社区 版权所有