进程通信

本文详细介绍了进程间通讯的目的与六种主要方式,包括管道、信号、信号量、共享内存、套接字及消息队列,并深入探讨了无名管道与有名管道的工作原理和技术要点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通讯的目的:
1,数据传输
2,资源共享
3,通知事件
4,进程控制
进程间通讯的方式:
1,管道pipe和有名管道fifo
2,信号
3,信号量
4,共享内存
5,套接字
6,消息队列


管道通讯
管道是单向的,先进先出的。
管道包括无名管道与有名管道,前者用于子进程与父进程进行通信,后者用于系统任意两个进程之间的通信。
Pipe函数创建无名管道:
intpipe(int filedis[2])
当一个管道创立是,他会建立两个文件描述符,filedis【0】用于读管道,filedis【1】用于写管道。
关闭管道时,只需逐个关闭这两个文件描述符即可。
 
无名管道的读写:
先创建一个管道,然后调用fork(),关闭不需要的文件描述符(确保先进先出的特性),然后向filedis[1]里写数据,从filedis[0]里读数据,注意进程间的协作(wiatpid(),sleep()的运用)。


命名管道:任意两进程的通信。
创建:
intmkfifo(const char* pathname,mode_t mode)


pathname为fifo名,mode为标致(O_NONBLOCK)
然后在不同进程中对pathname进行读写即可。。。。


信号通讯


产生信号:kill函数,键盘,硬件,kill命令
信号处理:
1,除了SIGKILL和SIGSTOP,其余的信号均可忽略。
2,执行用户指定的操作。
3,执行系统默认的动作。


信号发送:
两个函数:kill和raise
区别:kill既可以给自身发信号,也可以向其他进程发信号。Raise只能给自身发信号。
Intkill(pid_t pid,int signo)
intraise(int signo)


alarm函数:
使用alarm函数设定一个时间值,届时将产生SIGALRM信号。如果不捕捉此信号,默作是
终止次进程。


#include<unistd.h>
unsignedint alarm(unsigned int seconds)
seconed指定seconed秒后生信号SIGALRM。
Pause函数是调用进程等待直到捕捉到某个信号。
#include<unistd.h>
intpause(void)


信号的处理:
信号的处理有两种,一种是简单的用signal函数,一种是使用信号函数集。


Signal:
#include<signal.h>
void(*signal(intsigno,void (*func)(int)))(int)


共享内存
 多个进程共享一块内存,特点:速度快,不许要气他函数(如read,write等)。
步骤:
1,创建共享内存,shmget()函数。
  Intshmget(key_t key,int size,int shmflg)
如果key取值为IPC_PRIVATE,则创建一块信内存;当key取值为0且shmflg又设置为IPC_PRIVATE,同样会创建一块新内存。。


返回值:创建成功则返回共享内存标识符,失败则返回-1.


2,映射
intshmat(int shmid,char* shmaddr,ing flg)
shimid:shmget返回的共享内存标识符。
Flag:决定以什么方式来确定映射的地址。


返回值:成功则返回共享内存映射到进程中的地址,失败则返回-1.


回收:
intshmdt(int * shmaddr)
内容概要:本文深入探讨了Kotlin语言在函数式编程和跨平台开发方面的特性和优势,结合详细的代码案例,展示了Kotlin的核心技巧和应用场景。文章首先介绍了高阶函数和Lambda表达式的使用,解释了它们如何简化集合操作和回调函数处理。接着,详细讲解了Kotlin Multiplatform(KMP)的实现方式,包括共享模块的创建和平台特定模块的配置,展示了如何通过共享业务逻辑代码提高开发效率。最后,文章总结了Kotlin在Android开发、跨平台移动开发、后端开发和Web开发中的应用场景,并展望了其未来发展趋势,指出Kotlin将继续在函数式编程和跨平台开发领域不断完善和发展。; 适合人群:对函数式编程和跨平台开发感兴趣的开发者,尤其是有一定编程基础的Kotlin初学者和中级开发者。; 使用场景及目标:①理解Kotlin中高阶函数和Lambda表达式的使用方法及其在实际开发中的应用场景;②掌握Kotlin Multiplatform的实现方式,能够在多个平台上共享业务逻辑代码,提高开发效率;③了解Kotlin在不同开发领域的应用场景,为选择合适的技术栈提供参考。; 其他说明:本文不仅提供了理论知识,还结合了大量代码案例,帮助读者更好地理解和实践Kotlin的函数式编程特性和跨平台开发能力。建议读者在学习过程中动手实践代码案例,以加深理解和掌握。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值