ipc(一)

一、Linux下进程间通信方式总结(管道篇)




IPC全称interprocess communication,即进程间通信。在shell下可以输入命令ipcs来查看。
[toor@zcm ipc]$ ipcs -a


------ Shared Memory Segments --------
key shmid owner perms bytes nattch status


------ Semaphore Arrays --------
key semid owner perms nsems


------ Message Queues --------
key msqid owner perms used-bytes messages


总结起来linux下进程间通信有以下几种方式:


1、管道(pipe)
2、共享队列(queue)
3、信号量(semaphore)
4、共享内存(shared memory)
5、套接字(socket)


管道
管道是UNIX系统IPC的最古老形式。它提供了进程之间的一种单向通信的方法
管道分为有名管道和有名(匿名)管道。
无名管道在父子进程中应用,有名管道是一个文件可以被系统中的所有进程使用来达到进程通信的目的。

无名管道占用两个文件描述符,只能在父子进程间使用。所以使用匿名管道就会调用fork函数创建父子进程,
可以说无名管道存在于内存中。
调用函数pipe创建。

------------------------------------------------------------------------------------------------
#include <unistd.h>

int pipe(int fildes[2]);
------------------------------------------------------------------------------------------------
pipe函数可以得到两个文件描述符:
其中fildes[0]直接可以read,即为读而打开。
fildes[1]直接可以write,即为写而打开。

例如:子进程通过管道发送数据hello父进程接受并打印输出。
------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <unistd.h>

int main(void)
{
int fd[2];
char buff[10];
int r;
pipe(fd);
if(fork() == 0)
{
close(fd[0]);//关闭读端
write(fd[1], "hello\n", 6);
return 0;
}
else
{
close(fd[1]);//关闭写端
r = read(fd[0], buff, 6);
buff[r] = '\0';
printf("%s", buff);
}
return 0;
}
------------------------------------------------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值