20240204进程间通信

2024-02-04 20:52
文章标签 间通信 进程 20240204

本文主要是介绍20240204进程间通信,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.无名管道

  1 //无名管道2 #include <myhead.h>3 int main(int argc, const char *argv[])4 {5     //定义进程号变量6     pid_t pid =-1;7     //定义存放管道文件描述符的数组8     int pipefd[2]={0};9     //创建管道文件10     if(pipe(pipefd)==-1)11     {12         perror("pipe error");13         return -1;14     }15     printf("pipefd[0]=%d,pipefd[1]=%d\n",pipefd[0],pipefd[1]);16     //创建一个子进程17     pid=fork();18     //pid>0父进程负责写19     if(pid>0)20     {21         //关闭父进程无名管道中的读端22         close(pipefd[0]);23 24         char buf[128]="";25         while (1)26         {27             fgets(buf,sizeof(buf),stdin);28             buf[strlen(buf)-1]='\0';29             write(pipefd[1],buf,sizeof(buf));30             if (strcmp(buf,"quit")==0)31             {32                 break;33             }34         }35         close(pipefd[1]);36 37     }38     else if (pid==0)//子进程负责读39     {40         //关闭子进程的写端41         close(pipefd[1]);42 43         char rbuf[128]="";44 45         while (1)46         {47             bzero(rbuf,sizeof(rbuf));48             read(pipefd[0],rbuf,sizeof(rbuf));49             printf("收到父进程消息:%s\n",rbuf);50             if (strcmp(rbuf,"quit")==0)51             {52                 break;53             }54         }55         close(pipefd[0]);56     }57     return 0;58 }
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                                                                             
~                                                                                                                                                                                                                                                                                   

 有名管道

myfifo 管道文件:
建一个管道文件2 #include <myhead.h>3 int main(int argc, const char *argv[])4 {5     if (mkfifo("myfifo",0664)==-1)6     {7         perror("mkfifo error");8         return -1;9     }10     getchar();//阻塞11     system("rm myfifo");//删除当前目录下的管道文件12     return 0;13 }                                                                                       
~                                                                                           
~                                                                                           
~                                                                                           
send发送端:1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4 5     //打开管道文件6     int wfd=-1;7     if ((wfd=open(".myfifo",O_WRONLY))==-1)8     {9         perror("wfd open error");10         return -1;11     }12     //向管道文件中写入数据13     char wbuf[128]="";14     while (1)15     {16         printf("请输入>>>");17         fgets(wbuf,sizeof(wbuf),stdin);18         wbuf[strlen(wbuf)-1]='\0';19 20         write(wfd,wbuf,sizeof(wbuf));21         if (strcmp(wbuf,"quit")==0)22         {23             break;24         }25     }26     close(wfd);27     return 0;28 }                                                                                       
~                                                                                           
~                                                                                           
recv接收端:1 #include <myhead.h>2 int main(int argc, const char *argv[])3 {4     int rfd=-1;5     if((rfd=open("./myfifo",O_RDONLY))==-1)6     {7         perror("rfd open error");8         return -1;9     }10     //读11     char rbuf[128]="";12     while(1)13     {14         bzero(rbuf,sizeof(rbuf));15         read(rfd,rbuf,sizeof(rbuf));16         printf("收到一条消息:%s\n",rbuf);17         if (strcmp(rbuf,"quit")==0)18         {19             break;20         }21     }22     close(rfd);23 24     return 0;25 }                                                                                       
~                                                                                           
~                                                                                                      

信号: 

  1 #include <myhead.h>2 //定义信号处理函数3 void handler(int signo)4 {5     if (signo==SIGCHLD)6     {7         while(waitpid(-1,NULL,WNOHANG)>0);8     }9 }10 int main(int argc, const char *argv[])11 {       12     if (signal(SIGCHLD,handler)==SIG_ERR)13     {14         perror("signal error");15         return -1;16     }   17     //创建僵尸进程18     for (int i=0;i<20 ;i++ )19     {   20         if(fork()==0)21         {22         exit(EXIT_SUCCESS);23         }24     }25     while(1);//阻塞26     return 0;27 }                                                                                    
~                                                                                        
~                                                                                        
~        

这篇关于20240204进程间通信的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/678768

相关文章

[Linux]:进程(下)

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:Linux学习 贝蒂的主页:Betty’s blog 1. 进程终止 1.1 进程退出的场景 进程退出只有以下三种情况: 代码运行完毕,结果正确。代码运行完毕,结果不正确。代码异常终止(进程崩溃)。 1.2 进程退出码 在编程中,我们通常认为main函数是代码的入口,但实际上它只是用户级

java 进程 返回值

实现 Callable 接口 与 Runnable 相比,Callable 可以有返回值,返回值通过 FutureTask 进行封装。 public class MyCallable implements Callable<Integer> {public Integer call() {return 123;}} public static void main(String[] args

C#关闭指定时间段的Excel进程的方法

private DateTime beforeTime;            //Excel启动之前时间          private DateTime afterTime;               //Excel启动之后时间          //举例          beforeTime = DateTime.Now;          Excel.Applicat

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

java线程深度解析(二)——线程互斥技术与线程间通信

http://blog.csdn.net/daybreak1209/article/details/51307679      在java多线程——线程同步问题中,对于多线程下程序启动时出现的线程安全问题的背景和初步解决方案已经有了详细的介绍。本文将再度深入解析对线程代码块和方法的同步控制和多线程间通信的实例。 一、再现多线程下安全问题 先看开启两条线程,分别按序打印字符串的

Golang进程权限调度包runtime

关于 runtime 包几个方法: Gosched:让当前线程让出 cpu 以让其它线程运行,它不会挂起当前线程,因此当前线程未来会继续执行GOMAXPROCS:设置最大的可同时使用的 CPU 核数Goexit:退出当前 goroutine(但是defer语句会照常执行)NumGoroutine:返回正在执行和排队的任务总数GOOS:目标操作系统NumCPU:返回当前系统的 CPU 核数量 p

如何保证android程序进程不到万不得已的情况下,不会被结束

最近,做一个调用系统自带相机的那么一个功能,遇到的坑,在此记录一下。 设备:红米note4 问题起因 因为自定义的相机,很难满足客户的所有需要,比如:自拍杆的支持,优化方面等等。这些方面自定义的相机都不比系统自带的好,因为有些系统都是商家定制的,难免会出现一个奇葩的问题。比如:你在这款手机上运行,无任何问题,然而你换一款手机后,问题就出现了。 比如:小米的红米系列,你启用系统自带拍照功能后

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位

flume系列之:记录一次flume agent进程被异常oom kill -9的原因定位 一、背景二、定位问题三、解决方法 一、背景 flume系列之:定位flume没有关闭某个时间点生成的tmp文件的原因,并制定解决方案在博主上面这篇文章的基础上,在机器内存、cpu资源、flume agent资源都足够的情况下,flume agent又出现了tmp文件无法关闭的情况 二、

C++及AIDL服务间通信相关

只做细节展示,没有什么逻辑,陆续补充中

C++编程:ZeroMQ进程间(订阅-发布)通信配置优化

文章目录 0. 概述1. 发布者同步发送(pub)与订阅者异步接收(sub)示例代码可能的副作用: 2. 适度增加缓存和队列示例代码副作用: 3. 动态的IPC通道管理示例代码副作用: 4. 接收消息的超时设置示例代码副作用: 5. 增加I/O线程数量示例代码副作用: 6. 异步消息发送(使用`dontwait`标志)示例代码副作用: 7. 其他可以考虑的优化项7.1 立即发送(ZMQ_IM