linux 进程通信 开发,linux应用程序开发-进程通信(IPC)

IPC

why:

1.数据传输

2.资源共享

目的:

3.通知事件

4.进程控制

发展:

1.UNIX进程间通信

2.基于SYStem V

3.POSIX

方式分类:

1.pipe(管道) FIFO(有名管道)

2.signal

3.消息队列

4.共享内存

5.信号量

6.套接字(socket)

管道通信:单向,先进先出

创建

pipe:父子之间通讯

FIFO:任意

创建:

int pipe(int filedis[2]);

管道创建时,产生两个文件描述符:filedis[0]读管道,filedid[1]写管道。

关闭:

close(filedis[1,2])

关闭两个描述符

管道读写:

父进程写filedis[1],子进程读filedis[0]

fork必须再pipe之前创建。

有名管道:FIFO

创建

#include

#include

int mkfifo(const char*pathname,mode_t mode);

pathname:FIFO文件名

mode:属性

操作

当打开FIFO时,标志(O_NONBLOCK)

1.没有使用时:访问无法满足时,进程堵塞

2.使用:访问无法满足时不阻塞,立刻出错返回,error=ENXIO

信号通讯:

信号类型:(30种)

e:

SIGINT:CRTL+C

SIGKILL:

处理;

1.忽略

SIGKILL,SIGSTOP不能忽略

2.执行用户希望的动作

3.执行默认动作(大多是忽略)

signal

#include

void(*signal(int signo,void (*fun)(int)))(int)//如何理解??

Func可能取值:

1.SIG_LGN:忽略此信号

2.SIG_DFL:按系统默认方式

3.信号处理函数名:使用该函数处理

共享内存:

被多个进程共享一部分物理内存

速度快,不需要额外访问函数

实现:

1.创建 shmget()

2.映射到具体进程shmat()

int shmget(key_t key,int size,int shmflg)

key:共享内存键值

0/IPC_PRIVATE  创建新的内存,成功返回共享内存标示符,失败环回-1.

int shmat(int shmid,char*shmaddr,int flag)

shmid:共享内存标示符

flag:决定以什么方式来确定映射地址,通常为0

成功返回映射地址,失败返回-1.

脱离:

int shmdt(char*ahmaddr)

发送:

kill:向自身或其他进程发送

rasie:自身

#include

#include

int kill(pid_t,int signo)

int rasie(int signo)

pid>0:

pid==0:同组

pid<0:发送给其进程组id等于|pid|的进程

pid==-1:所有进程

Alarm

unsigned int alarm(unsigned int seconds);

经过预定的时间,产生sigalrm信号,如果不捕捉,则终止该进程。

pause

使进程调用挂起,直到收到一个信号

int pause(void)

只有执行了一个信号处理函数后后,挂起才结束。

信号处理

原文:http://www.cnblogs.com/summer-xwq/p/4162341.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值