信号灯(semaphore),也叫信号量。它是不同进程间或一个给定进程内部不同线程间的同步的机制
信号灯种类:
posix有名信号灯。
posix基于内核的信号灯(无名信号灯)
System V信号灯(IPC对象)
System V的信号灯是一个或者多个信号灯的一个集合。其中的每一个都是单独的计数信号灯。而posix信号灯指的是单个计数信号灯
可以通过命令
ipcs -a查看所有的IPC对象使用情况
ipcs -m 查看共享内存
ipcs -q 查看消息队列
ipcs -s 查看信号灯集
ipcrm -m shmid 删除shmid的共享内存
ipcrm -q msgid 删除消息队列
ipcrm -s semid 删除信号灯集
主要函数ftok,semget,semop,semctl
key_t ftok(const char *pathname, int proj_id);
参数:
pathname 指定的文件夹或者文件
proj_id 是子序号。
返回值:成功返回key值,失败返回:-1
ftok()函数会获取第一个参数(文件或目录)的属性信息,并把ftok()的第二个参数的后8位,st_dev的后两位,st_ino的后四位,构成了一个键值。
所以由于ftok()只取参数proj_id的后8位(0-255),所以调用ftok两次传入不同的值,生成的key值可能相同,我不是我们想要的,所以我们一般都传一个char类型的字符(如'a')。