有名信号量的创建
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #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); } |
查看创建结果:
1 2 3 4 5 | $ ./a.out jia $ cd /dev/shm/ $ ls -l total 4 -rw-r--r--. 1 dmin dmin 32 Oct 11 14:19 sem.jia |
获取信号量的值:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | #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); } |
结果如下:
1 2 | $ ./a.out jia value=1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现