semget
函数的作用:创建信号量
函数的原型:int semget(key_t key,int nsems, int semflg)
函数的参数:nsems:创建信号量的数目
semflg:同open一样的权限
semctl
函数的作用:信号量的控制:初始化,删除
函数的原型:int semctl(int semid,int semnum, int cmd,union semunarg)
函数的参数:semid信号量标识符
semnum:信号量编号
cmd:IPC_STAT:
IPC_SETVAL设置为arg中的val值:
IPC_GETVAL:获取信号量的值
IPC_RMID:删除信号量
返回值:不同cmd返回不一样IPC_STAT,IPC_SETVAL,IPC_RMID,返回0
IPC_GETVAL返回信号量的值
参考程序附上
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main()
{
int fd = 0;
key_t key;
int semid;
struct sembuf sops;
int ret;
{
int fd = 0;
key_t key;
int semid;
struct sembuf sops;
int ret;
key = ftok("/home/linux", 1);
semid = semget(key, 1, IPC_CREAT);
ret = semctl(semid, 0, SETVAL, 1);
fd = open("board.txt", O_RDWR|O_CREAT|O_APPEND);
sops.sem_num = 0;
sops.sem_op = -1;
semop(semid, &sops, 1);
write(fd, "class math", 11);
ret = semctl(semid, 0, SETVAL, 1);
fd = open("board.txt", O_RDWR|O_CREAT|O_APPEND);
sops.sem_num = 0;
sops.sem_op = -1;
semop(semid, &sops, 1);
write(fd, "class math", 11);
sleep(20);
sops.sem_num = 0;
sops.sem_op = +1;
semop(semid, &sops, 1);
close(fd);
}
sops.sem_num = 0;
sops.sem_op = +1;
semop(semid, &sops, 1);
close(fd);
}
#include <fcntl.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/ipc.h>
#include <sys/sem.h>
int main()
{
int fd = 0;
key_t key;
int semid;
struct sembuf sops;
{
int fd = 0;
key_t key;
int semid;
struct sembuf sops;
key = ftok("/home/linux", 1);
semid = semget(key, 1, IPC_CREAT);
fd = open("board.txt", O_RDWR|O_CREAT|O_APPEND);
sops.sem_num = 0;
sops.sem_op = -1;
semop(semid, &sops, 1);
write(fd, "english exam", 20);
fd = open("board.txt", O_RDWR|O_CREAT|O_APPEND);
sops.sem_num = 0;
sops.sem_op = -1;
semop(semid, &sops, 1);
write(fd, "english exam", 20);
sops.sem_num = 0;
sops.sem_op = +1;
semop(semid, &sops, 1);
close(fd);
}
sops.sem_op = +1;
semop(semid, &sops, 1);
close(fd);
}