Linux-进程间的通信(IPC)
文章平均质量分 91
Sparking-Water
这个作者很懒,什么都没留下…
展开
-
Linux进程间的通信-信号量(semget、semstl、semop)
若flag包含SEM_UNDO,则当进程退出的时候会还原该进程的信号量操作,这个标志在某些情况下是很有用的,比如某进程做了P操作得到资源,但还没来得及做V操作时就异常退出了,此时,其他进程就只能都阻塞在P操作上,于是造成了死锁。sem_perm结构的uid和cuid成员被设置成当前进程的有效用户ID,gid和cuid成员被设置成当前进程的有效组ID。semnum:是要操作的信号量在集合中的索引,通常为0,表示第一个信号量。得到一个信号量集标识符或创建一个信号量集对象并返回信号量集标识符。原创 2024-07-17 10:28:14 · 836 阅读 · 0 评论 -
Linux进程间的通信-信号(signal、kill、sigaction、sigqueue)
对于每个信号来说,系统都对应由默认的处理动作,当发生了该信号,系统会自动执行。二、sigaction 函数用于设置信号的处理方式,它提供了更为灵活和可靠的信号处理机制,相较于较旧的 signal 函数,更推荐使用 sigaction。函数向指定的进程发送信号,传递了进程的 PID、信号编号和附加的值。发送失败时,函数返回 -1,并打印错误信息。当处理某个信号时,可以屏蔽其他特定的信号,以避免信号处理函数被其他信号中断。函数将命令行参数转换为整型,获取了要发送信号的进程的 PID 和要发送的信号编号。原创 2024-07-17 10:27:38 · 727 阅读 · 0 评论 -
Linux进程间的通信-共享内存
在实际使用中,可以根据具体需求调用这些函数进行共享内存的创建、连接、访问和管理操作。函数将共享内存段连接到进程的地址空间中。它接受 shmid 和一些附加参数,并返回指向共享内存段的指针。函数创建一个共享内存段,并指定大小和权限等参数。访问共享内存:通过操作指针来读取和写入共享内存中的数据,就像访问普通的内存一样。删除共享内存:在最后一个进程使用完共享内存后,可以调用。函数删除共享内存段。分离共享内存:当不再需要使用共享内存时,调用。:以只读方式连接到共享内存段,或者(函数将共享内存从当前进程中分离。原创 2024-07-17 10:27:05 · 510 阅读 · 0 评论 -
进程间的通信——消息队列
消息队列是在内核中创建和维护的,用于存储和传递消息。每个消息都有一个类型和数据部分,进程可以按照类型从消息队列中读取特定类型的消息。注意,该大小必须至少大于等于消息结构体的大小,以确保能够容纳接收到的消息内容。函数生成的 key 可能在不同系统上有不同的表示方式,因此在跨平台的程序中需要小心使用。是一个用于生成唯一标识符(key)的函数,通常用于创建共享内存和消息队列等进程间通信机制。:指向要发送的消息的指针,通常是一个自定义的结构体指针。:指向消息缓冲区的指针,用于接收接收到的消息内容。原创 2024-07-17 10:26:25 · 559 阅读 · 0 评论 -
进程通信-管道
阻塞式读写操作:当一个进程打开一个命名管道进行读取时,如果没有数据可用,它将被阻塞,并在有数据可用时恢复。相反,当一个进程向命名管道写入数据时,如果管道已满,它将被阻塞,并在有空间可用时恢复。由于管道是利用环形队列实现的,数据从写端流入管道,从读端流出,这样就实现了进程间通信。函数创建的管道)不同之处在于,命名管道有一个关联的文件路径(即文件名),可以在文件系统中进行访问。持久性:与无名管道不同,命名管道具有持久性,即使创建管道的进程结束或关闭,命名管道仍然存在于文件系统中,直到被显式删除。原创 2024-07-17 10:25:30 · 766 阅读 · 0 评论