ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux下进程间通信

2021-10-02 21:00:11  阅读:124  来源: 互联网

标签:char int 管道 间通信 writeLen Linux 进程 include data


以下内容仅作为个人记录的参考,但也欢迎读者前来指正。

现在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);关闭上面产生的文件流

 

标签:char,int,管道,间通信,writeLen,Linux,进程,include,data
来源: https://www.cnblogs.com/dayq/p/15362679.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有