进程间通信(8)-IPC通信之信号灯

1、信号灯

信号灯集合(可以包含多个信号灯),IPC对象是一个信号灯集(多个信号量)。

进程间通信(8)-IPC通信之信号灯_第1张图片
信号灯

2、信号灯与信号量的对比

进程间通信(8)-IPC通信之信号灯_第2张图片
信号灯与信号量的对比

3、semget函数

int semget(key_t key, int nsems, int semflg);
进程间通信(8)-IPC通信之信号灯_第3张图片
semget函数

例子:

#include "sys/types.h"
#include "sys/sem.h"
#include "signal.h"
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    int semid;
    semid = semget(IPC_PRIVATE, 3, 0777);
    if(semid < 0)
    {
        printf("create semaphore failure\n");
        return -1;
    }
    printf("create semaphore success semid = %d\n", semid);
    system("ipcs -s");

    while(1);
    return 0;
}
进程间通信(8)-IPC通信之信号灯_第4张图片
成功创建

4、semctl函数

进程间通信(8)-IPC通信之信号灯_第5张图片
semctl函数

例子:

#include "sys/types.h"
#include "sys/sem.h"
#include "signal.h"
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
#include "string.h"

int main()
{
    int semid;
    semid = semget(IPC_PRIVATE, 3, 0777);
    if(semid < 0)
    {
        printf("create semaphore failure\n");
        return -1;
    }
    printf("create semaphore success semid = %d\n", semid);
    system("ipcs -s");

    // delete semaphore
    semctl(semid, 0, IPC_RMID);
    system("ipcs -s");
    return 0;
}
进程间通信(8)-IPC通信之信号灯_第6张图片
成功删除

5、semop函数

进程间通信(8)-IPC通信之信号灯_第7张图片
semop函数

你可能感兴趣的:(进程间通信(8)-IPC通信之信号灯)