ipc(一)
来源:互联网 发布:linux怎么用ss翻墙 编辑:程序博客网 时间:2024/04/30 00:49
一、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;
}
------------------------------------------------------------------------------------------------
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;
}
------------------------------------------------------------------------------------------------
- ipc(一)
- IPC程序例子 一
- 进程-IPC 管道 (一)
- IPC(一)
- IPC机制(一)
- 3.IPC 机制(一)
- Android中的IPC(一)
- IPC机制<一>
- IPC机制(一)
- IPC机制(一)
- IPC(一)--IPC简介和IPC产生的问题
- posix IPC shared_memory一例
- Linux 中的IPC(一)-----简介
- 读书笔记--IPC机制(一)
- android IPC机制讲解(一)
- [读书笔记]Android IPC机制(一)
- Android的IPC机制一
- android IPC机制(一)
- ContentProvider和Uri详解
- (转)android中ListView点击和里边按钮或ImageView点击不能同时生效问题解决
- 分布式一致性Paxos算法学习笔记(二)
- 分布式一致性Paxos算法学习笔记(三)
- unix shell 与if相关参数
- ipc(一)
- zookeeper 入门
- 开始准备java技术blog分,Mark下,亲的开始
- suse 垃圾箱位置
- 心醉七夕
- 分布式系统协调 ZooKeeper
- 面试训练寻找逆序对
- Linux多线程学习(九)pthread_kill
- iOS 真机测试 Code Sign Error: Provisioning Profile can't be found 问题解决方法