Linux进程间通信之通信概述

本文深入解析Linux下的进程间通信机制,涵盖管道、信号、IPC、Socket等通信方式,并探讨线程间通信的区别与实现方法,适合Linux编程初学者及进阶者阅读。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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: 功能:关闭或删除进程通信对象。形式可能不一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值