Linux软件编程----进程间相互通信

一、进程间通信的方式:

        1.管道.

        2.信号

        3.消息队列

        4.共享内存

        5.有名信号量

        6.本地域套接字

二、进程间通信----管道

        1.无名管道:只能用于具有亲缘关系的进程间的通信;

                本质:一段内核缓存区;

                特点:

                (1)有写端:

                        有数据直接读取数据,没有数据阻塞等待,直到写入数据,继续执行;

                (2)没有写端:

                        有数据直接读取数据,没有数据不阻塞等待,继续执行;

                (3)有读端:

                        管道中没有写满64k时,直接写入;没有写满时,阻塞等待直到有数据写入读出数据继续执行;

                (4)没有读端:

                        向管道中写入数据,管道破裂,进程退出;

                函数接口:

                        pipe:创建一个无名管道,获得操作管道的两个文件描述符;

                        pipe[0]:读管道文件描述符;

                        pipe[1]:写入管道文件描述符;

        2.有名管道:

                函数接口:

                        mkfifo:创建有名管道;

                注意:必须读写两端同时加入,才能向下执行;

三、进程间通信----信号

        1.概念:实现用户层和内核层的通信;

        2.分类:在终端使用kill -l命令查看;

                常见的信号:在终端输入

                        SIGINT:打断进程任务(ctrl+c)

                        SIGQUIT:进程任务退出(ctrl+'\')

                        SIGTSTP:进程任务挂起(ctrl+z)

        3.应用层处理信号的方式:

                缺省:默认处理方式;

                忽略:不处理信号;

                捕捉:自定义处理方式;

                注意:SIGKILL(9)和SIGSTOP(19)不能忽略和捕捉;

        4.函数接口:

                signal:注册一个信号处理的方式;

                pause:进程任务挂起;

                raise:向调用该函数的任务发送信号;

                alarm:定时seconds秒后给自己发送一个SIGALARM信号;

                kill:给进程发送信号;

四、进程间通信----消息队列

        1.命令:

                ipcs:查看所有的ipc对象

                        -m:查看共享内存;

                        -q:查看消息队列;

                        -s:查看信号量数组

                ipcrm:删除指定的ipc对象

                        ipcrm -m\q\s  key(ipc对象名称)

                        ipcrm -M\Q\S  id(共享内存/消息队列/信号灯id)

       2.函数接口:

                ftok:根据路径和proj_id生成ipc对象名称

                        注:proj_id:8bit并且不能为0;

                msgget:创建一个消息队列;

                msgsnd:像消息队列发送消息

                msgrcv:从消息队列中读取消息

                msgctl:向消息队列发送命令;

                

你可能感兴趣的:(linux,运维,服务器)