Linux下进程间通信
2021/10/3 7:11:53
本文主要是介绍Linux下进程间通信,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
以下内容仅作为个人记录的参考,但也欢迎读者前来指正。
现在linux下使用较多的进程间通信方式主要有以下几种: 1.管道及有名管道(named pipe)。管道用于有亲缘关系进程间通信,有名管道没有亲缘关系限制。 2.信号(signal):信号是在软件层面对终端机制的一种模拟 3.消息队列(messagae queue):克服前面的信息量有限的缺点,具有权限限制的功能 4.共享内存(shared memory):多个进程可以同时访问同一块内存空间,依靠某种同步机制,如互斥锁和信号量。 5.信号量(semaphore):主要作为进程之间以及同一进程的不同线程之间的同步和互斥手段 6.套接字(socket)
1.管道:
创建管道时,它会创建两个文件描述符fds[0]/fds[1],分别固定为读/写。
#include<unistd.h> int pipe(int fd[2]); 成功:返回0 失败:返回-1
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<unistd.h> 4 5 int main() 6 { 7 int pipefd[2]; 8 char buff[] = "hello"; 9 int len = strlen(buff); 10 char* data; 11 data = (char*)malloc(len+1); 12 if(pipe(pipefd)<0) 13 { 14 printf("create pipe error.\n"); 15 exit(1); 16 } 17 int pid; 18 pid = fork(); 19 if(pid==0) 20 { 21 close(pipefd[1]); 22 sleep(3); 23 int readLen = read(pipefd[0],data,(len+1)); 24 if(readLen>0) 25 { 26 printf("child recv %d bytes,and data is %s\n",readLen,data); 27 exit(0); 28 } 29 30 } 31 else if(pid>0) 32 { 33 close(pipefd[0]); 34 sleep(1); 35 int writeLen = write(pipefd[1],buff,len); 36 printf("writeLen = %d\n",writeLen); 37 if(writeLen>0) 38 { 39 printf("parent write %d bytes,and data is %s.\n",writeLen,buff); 40 waitpid(pid,NULL,0); 41 exit(0); 42 } 43 } 44 return 0; 45 }
标准流管道:
使用popen(const char* command,const char* type); 类似于shell执行command一样。 type可以是"r",该命令产生输出 "w",该命令产生输入 成功:返回文件流指针 失败:返回-1 pclose(fp);关闭上面产生的文件流
这篇关于Linux下进程间通信的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-12如何创建可引导的 ESXi USB 安装介质 (macOS, Linux, Windows)
- 2024-11-08linux的 vi编辑器中搜索关键字有哪些常用的命令和技巧?-icode9专业技术文章分享
- 2024-11-08在 Linux 的 vi 或 vim 编辑器中什么命令可以直接跳到文件的结尾?-icode9专业技术文章分享
- 2024-10-22原生鸿蒙操作系统HarmonyOS NEXT(HarmonyOS 5)正式发布
- 2024-10-18操作系统入门教程:新手必看的基本操作指南
- 2024-10-18初学者必看:操作系统入门全攻略
- 2024-10-17操作系统入门教程:轻松掌握操作系统基础知识
- 2024-09-11Linux部署Scrapy学习:入门级指南
- 2024-09-11Linux部署Scrapy:入门级指南
- 2024-08-21【Linux】分区向左扩容的方法