Poxis IPC
消息队列 | 信号量 | 共享内存区 | |
头文件 | <mqueue.h> | <semaphore.h> | <sys/mman.h> |
创建、打开或删除IPC的函数 |
mq_open mq_close mq_unlink |
sem_open sem_close sem_unlink |
shm_open shm_unlink |
sem_init sem_destroy |
|||
控制IPC操作的函数 |
mq_getattr mq_setattr |
ftruncate fstat |
|
IPC操作函数 |
mq_send mq_receive mq_notify |
sem_wait sem_trywait sem_post sem_getvalue |
mmap munmap |
sem_open是用来创建命名信号量的,在RHEL5.4测试,命名信号量存在于/dev/shm目录下,注意其持续性是随内核。创建了一个命名信号量,其初始值竟然是sem_getvalue:134514137,为什么?为什么打开一个信号量用O_RDONLY,还可以sem_post呢?
System V IPC
消息队列 | 信号量 | 共享内存区 | |
头文件 | <sys/msg.h> | <sys/sem.h> | <sys/shm.h> |
创建或打开IPC的函数 | msgget | semget | shmget |
控制IPC操作的函数 | msgctl | semctl | shmctl |
IPC操作函数 |
msgsnd msgrcv |
semop |
shmat shmdt |