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

📄 cutil-slock.c

📁 Linux环境下常用功能的实现
💻 C
字号:
#include "cutil.h"/** * cutil_slock_init * @nKey: 信号锁的键值 * * 创建并初始化信号锁 *  * Returns: 成功返回信号锁键值.失败返回-1 */int cutil_slock_init(int nKey){	int nSemId;	union semun {		int val;	}arg;	if((nSemId = semget(nKey, 3, IPC_CREAT | IPC_EXCL| 0600)) < 0)	{		if(errno == EEXIST)		{			if((nSemId = semget(nKey, 3, 0600)) < 0)			{				cutil_log_error(N_("create semphore:%d error:%s\n"), 					nKey, strerror(errno));				return -1;			}			return nSemId;		}	}	arg.val = 0;	if(semctl(nSemId, 0, SETVAL, arg) < 0)	{		cutil_log_error(N_("set semphore value error:%s\n"), strerror(errno));		return -1;	}	arg.val = 0;	if(semctl(nSemId, 1, SETVAL, arg) < 0)	{		cutil_log_error(N_("set semphore value error:%s\n"), strerror(errno));		return -1;	}	arg.val = 1;	if(semctl(nSemId, 2, SETVAL, arg) < 0)	{		cutil_log_error(N_("set semphore value error:%s\n"), strerror(errno));		return -1;	}	return nSemId;}/** * cutil_slock_set_read * @nSemID: 信号锁的键值 * * 设置只读锁 *  * Returns: 成功返回0.失败返回-1 */int cutil_slock_set_read(int nSemID){	static struct sembuf struSemBuf[2] = {		{0, 1, 0},		{1, 0, 0},	};	if(semop(nSemID, struSemBuf, 2) < 0)	{		cutil_log_error(N_("set read lock error:%s\n"), strerror(errno));		return -1;	}	return 0;}/** * cutil_slock_unset_read * @nSemID: 信号锁的键值 * * 取消只读锁 *  * Returns: 成功返回0.失败返回-1 */int cutil_slock_unset_read(int nSemId){	static struct sembuf struSemBuf[1] = {		{0, -1, IPC_NOWAIT},	};	if(semop(nSemId, struSemBuf, 1) < 0)	{		cutil_log_error(N_("unset read lock error:%s\n"), strerror(errno));		return -1;	}	return 0;}/** * cutil_slock_set_write * @nSemID: 信号锁的键值 * * 设置只写锁 *  * Returns: 成功返回0.失败返回-1 */int cutil_slock_set_write(int nSemID){	static struct sembuf struSemBuf[3] = {		{0, 0, 0},		{1, 1, 0},		{2, -1, 0},	};	if(semop(nSemID, struSemBuf, 3) < 0)	{		cutil_log_error(N_("set write lock error:%s\n"), strerror(errno));		return -1;	}	return 0;}/** * cutil_slock_unset_write * @nSemID: 信号锁的键值 * * 取消只写锁 *  * Returns: 成功返回0.失败返回-1 */int cutil_slock_unset_write(int nSemId){	static struct sembuf struSemBuf[2] = {		{1, -1, IPC_NOWAIT},		{2, 1, IPC_NOWAIT}	};	if(semop(nSemId, struSemBuf, 2) < 0)	{		cutil_log_error(N_("unset write lock error:%s\n"), strerror(errno));		return -1;	}	return 0;}

⌨️ 快捷键说明

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