⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ipcsem.c

📁 本文件介绍了unix内核的c源代码
💻 C
字号:
#include <sys/sem.h>#include <sys/types.h>#include <sys/ipc.h>#include <stdio.h>#include <sys/stat.h>#define VERIFYERR(a, b)  \	if (a) fprintf(stderr, "%s failed.\n", b);  \	else fprintf(stderr, "%s success.\n", b);  void main(int argc, char *argv[]){	int semid, index, i;	struct semid_ds ds;		unsigned short array[100];	if (argc != 4) return;	semid = atoi(argv[1]);	index = atoi(argv[2]);	if (argv[3][0] == 'c')	{	/* 创建信号量 */		VERIFYERR(semget(semid, index, 0666|IPC_CREAT|IPC_EXCL) < 0, "Create sem");	}	else if (argv[3][0] == 'd')	{	/* 删除消息队列 */		VERIFYERR(semctl(semid, 0, IPC_RMID, NULL) < 0, "Delete sem");	}		else if (argv[3][0] == 'v')	{	/* 查看信号量信息 */		fprintf(stderr, "T     ID      INDEX       SEMVAL  SEMPID      SEMNCNT    SEMZCNT\n");		fprintf(stderr, "s %6d %6d %10d %10d %10d %10d\n",			semid, 					/* 标识号 */			index,					/* 信号量序号 */			semctl(semid, index, GETVAL), 		/* 信号量值 */			semctl(semid, index, GETPID), 		/* 最近访问进程ID */			semctl(semid, index, GETNCNT), 		/* P阻塞进程数 */			semctl(semid, index, GETZCNT));		/* Z阻塞进程数 */	}	else if (argv[3][0] == 'a')	{	/* 查看信号量信息 */		ds.sem_nsems = 0;		VERIFYERR(semctl(semid, 0, IPC_STAT, &ds) != 0, "Get Sem Stat");		VERIFYERR(semctl(semid, 0, GETALL, array)!= 0, "Get Sem All");		for (i=0; i<ds.sem_nsems; i++)		{			fprintf(stderr, "sem no[%d]  [%d]\n", i, array[i]);		}	}	else 	{		VERIFYERR(semctl(semid, index, SETVAL, atoi(argv[3])) != 0, "Set Sem Val");	}		}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -