Linux系统编程——进程间通信

1.进程间通信(IPC)概述

        

 

 2.管道通信原理

        2.1特点

 管道中的数据读走就没了

        2.2原型

 Demo

        

3.无名管道

        3.1 pipe函数

                3.1.1参数说明

                        

                         pipefd:存在两个元素的整型数组

                3.1.2返回值

                        成功:0

                        失败:-1

Demo

 3.创建命名管道(FIFO )

        3.1特点

        3.2 mkfifo函数

        

                3.2.1参数说明

                        pathname:创建管道的路径名

                        mode:创建命名管道的类型(同open中的mode——0600)

                3.2.2返回值

                        成功:0

                        失败:-1

Demo 

 4.命名管道的数据通信编程实现

        4.1读操作

Demo

         4.2写操作

Demo

 5.消息队列

        5.1特点

        5.2消息队列相关API

6.消息队列编程收发数据

        6.1 msgget函数

                6.1.1参数说明

                

                6.1.2返回值

                        成功:msgid

                        失败:-1

Demo

        6.2 msgrcv函数

                6.2.1参数说明

                msgid: msgget的返回值

                msgp:

先构建一个结构体,msgbuf,定义一个结构体变量,取该变量地址为参数

                msgsz:消息的大小,用sizeof(结构体变量.mtext即可)

                msgtyp:

                 msgflg:一般为0

Demo

                6.2.2返回值

                        成功:为读取的实际字节数

                        失败:-1

        6.3 msgsnd函数

                6.3.1参数说明

                       msqid:msgget的返回值

                       msgp:要发送的结构体

                       msgsz:要发送的大小

                       msgflg:一般为0

                6.3.2返回值

                        成功:0

                        失败:-1

读操作

写操作:

 7.键值生成以及消息队列移除

        7.1键值生成

                7.1.1 ftok函数

                        7.1.1.1参数说明 

                fname:一般用当前目录

                id:一般用小的整型数

                        7.1.1.2返回值

                                成功:key

                                失败:-1

Demo

        

        7.2消息队列移除

        一般做法:

       

8.共享内存概述

AB进程同时能够读取到同一块内存空间

 操作方法:1.创建/打开共享内存

                   2.映射

                   3.数据交互

                   4.释放共享内存

                   5.干掉

相关API

 9.共享内存编程实现

 写操作

读操作

10.信号概述

                  

11.信号编程

        11.1信号处理函数的注册

                11.1.1signal函数 

                        11.1.1.1参数说明

                                signum参考信号表,如ctrl c为2,kill为9

                                handler:信号处理函数(定义一个返回值为void,参数为int类型的函数)

Demo

        11.2信号处理发送函数

                 11.2.1 kill函数

                 

                pid:进程id

                signum:signum参考信号表,如ctrl c为2,kill为9

Demo

        11.3信号忽略的宏SIG_IGN

Demo

12.信号如何携带信息

        12.1 sigaction函数原型

                12.1.1参数说明

                        12.1.1.1 signum信号值

                        12.1.1.2 act

 sigaction结构体

                        sa_handler函数指针:同signal中的handler函数指针

                        sa_sigaction函数指针:

                                     int:signum

                                     siginfo_t 结构体

                                     eg:si_pid谁发的

                                             si_int发送整型数

                                             si_value联合体,int,char*

                                sa_mask:默认值为阻塞

                                sa_flgs:SA_SIGINFO表示能接收数据

                                void* :当指针为空时无数据                

                                          当指针非空时有数据

                        12.1.1.3 oldact:类比act

Demo

        12.2信号发送函数高级版——sigqueue

                12.2.1函数原型

                         12.2.1.1参数说明

                                pid:发给谁(哪个线程)

                                sig:发送什么信号

                                value:消息

sendDemo

 

 13.信号量概述

        13.1特点

         13.2临界资源

         13.3 API原型

                 13.3.1 semget函数

                 

                        13.3.1.1参数说明

                                key:由ftok返回

                                num_sems:信号量集中信号量的个数

                                sem_flags:一般为IPC_CREAT|0666

                        13.3.1.2返回值

                                成功:信号集id

                                失败:-1

Demo

 

                13.3.2 semctl函数                           

     ​​​​​​​         

                        13.3.2.1参数说明

                                semid:semget的返回值

                                semnum:第几个信号量

                                cmd:指令,一般初始化为SETVAL,销毁时为IPC_RMID

                                第四个参数:先定义一个共用体,并初始化结构体变量中的val为1

        ​​​​​​​​​​​​​​         

Demo

                13.3.3semop函数

        ​​​​​​​        

                semid:semget的返回值

                sops:结构体数组

                nsops:数组元素的个数

         13.4 pv操作

                13.4.1 p操作

                13.4.2 v操作

Demo

 Linux系统编程——进程完结

 

 

                                                   

               

                        

                        

   

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值