有名信号量的创建
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <fcntl.h>
#include <semaphore.h>
const int maxline=4096;
int main(int argc, char **argv) {
int c, flags;
sem_t *sem;
unsigned int value;
char errbuff[maxline];
flags = O_RDWR | O_CREAT;
value=1;
while((c=getopt(argc, argv, "ei:"))!=-1) {
switch(c) {
case 'e':
flags|=O_EXCL;
break;
case 'i':
value=atoi(optarg);
break;
}
}
if(optind!=argc-1) {
fprintf(stderr, "usage: ./a.out [-e] [-i initalvalue] <name>.\n");
exit(-1);
}
if((sem=sem_open(argv[optind], flags, 0644, value))==SEM_FAILED) {
strerror_r(errno, errbuff, maxline);
fprintf(stderr, "sem_open error: %s\n", errbuff);
exit(-1);
}
sem_close(sem);
exit(0);
}
查看创建结果:
$ ./a.out jia $ cd /dev/shm/ $ ls -l total 4 -rw-r--r--. 1 dmin dmin 32 Oct 11 14:19 sem.jia
获取信号量的值:
#include <stdio.h>
#include <stdlib.h>
#include <semaphore.h>
int main(int argc, char **argv) {
sem_t *sem;
int val;
if(argc!=2) {
fprintf(stderr, "usage: ./a.out <name>.\n");
exit(-1);
}
sem=sem_open(argv[1], 0);
sem_getvalue(sem, &val);
printf("value=%d\n", val);
exit(0);
}
结果如下:
$ ./a.out jia value=1
浙公网安备 33010602011771号