Linux进程间通信之通信概述
一:进程通信概述
1.什么是进程间通信?
什么是线程间通信?
进程通信:在用户空间实现进程通信是不可能的,通过Linux内核通信
#include "unistd.h"
#include "stdio.h"
#include "sys/types.h"
#include "stdlib.h"
int main()
{
pid_t pid;
int process_inter=0;
pid = fork();
if(pid ==0)//child process code second
{
int i=0;
while(process_inter == 0); //process_inter=1 exit
for(i=0;i<5;i++)
{
printf("this is child process i=%d\n",i);
usleep(100);
}
}
if(pid >0)//parent process code first
{
int i=0;
for(i=0;i<5;i++)
{
printf("this is parent process i=%d\n",i);
usleep(100);
}
process_inter=1;
}
while(1);
return 0;
}
此时两个进程要想通信则需要:
线程间通信:可以在用户空间就可以实现,可以通过全局变量通信。
#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <unistd.h>
int thread_inter=0;
void *fun(void *var)//child thread code
{
int j;
while(thread_inter ==0);
for(j=0;j<10;j++)
{
usleep(100);
printf("this is fun j=%d\n",j);
}
}
int main()//main thread code
{
int i;
char str[]="hello linux\n";
pthread_t tid;
int ret;
ret=pthread_create(&tid,NULL,fun,(void *)str);
if(ret<0)
{
printf("creat thread failure\n");
return -1;
}
for(i=0;i<10;i++)
{
usleep(100);
printf("this is main fun i=%d\n",i);
}
thread_inter=1;
while(1);
return 0;
}
`
2.有哪几种通信方式?
管道通信:无名管道、有名管道(文件系统中有名)
信号通信:信号(通知)通信包括:信号的发送、信号的接收和信号的处理。
IPC(Inter-Process Communication)通信:共享内存、消息队列和信号灯。
以上是单机模式下的进程通信(只有一个Linux内核)
Socket通信:存在于一个网络中两个进程之间的通信(两个Linux内核)。
3.进程通信课程的学习思路:每一种通信方式都是基于文件IO的思想。
open:功能:创建或打开进程通信对象。函数形式不一样,有的是有多个函数完成。
write: 功能:向进程通信对象中写入内容。函数形式可能不一样。
read: 功能:从进程通信对象中读取内容。函数形式可能不一样。
close: 功能:关闭或删除进程通信对象。形式可能不一样。