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

📄 semaphore.c

📁 包括BASE64编码的C语言实现,DES加密的C实现,共享内存,信号量的C实现
💻 C
字号:
#include "semaphore.h"

union semun {
	int 		val ;	/* for SETVAL */
	struct semid_ds *buf ; /* for IPC_STAT and IPC_SET */
	ushort	*array ; /* for GETALL and SETALL */
}; 

/* create semaphore */
int 
sem_create(key_t key)
{  
	union semun sem ;
	int semid; 
	 
	sem.val = 1; 
	/*
		int semget(key_t key, int nsems, int flag);
	*/ 
	semid = semget(key, 0, 0);  
	if (semid == -1)
	{  		
		semid = semget(key, 1, IPC_CREAT|0666);  
		if (semid == -1)
		{
			printf("sys alm: create semaphore failed\n");
			return semid;
		}
		else
			printf("sys not: create semaphore success\n");

		/*
		int semctl(int semid, int semnum, int cmd, union semunarg) ;
		*/
		/* init semaphore */
		semctl(semid, 0, SETVAL, sem);  
		return semid;  
	}  
	else
		printf("sys not: get semaphore success\n");
	
	return semid;
} 

/* delete semaphore */ 
void sem_delete(int semid)
{  
	/*
		int semctl(int semid, int semnum, int cmd, union semunagr);
	*/
	/* delete semaphore */	
	semctl(semid, 0, IPC_RMID, 0);  
	printf("sys not: delte semaphore success\n");
} 

/* p operation */
int p(int semid)
{  
	struct sembuf sops={0, -1, SEM_UNDO};
	
	/*
		int semop(int semid, struct sembuf semoparray[], size_t nops);
		semoparray is a point.		
	*/
	return(semop(semid, &sops, 1));  
}  

/* v operation */
int v(int semid)
{  
	struct sembuf sops={0, +1, SEM_UNDO};
	/* 
		int semop(int semid, struct sembuf semoparray[], int nops);
	*/
	return(semop(semid, &sops, 1));  
} 

⌨️ 快捷键说明

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