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

📄 myipc.c

📁 配套光盘网络编程进程间的通信,网络编程进程间的通信是一本很经典的好书
💻 C
字号:
/**\file myipc.c
 * 自定义进程间通信的封包库的实现文件
 */
#include "myipc.h" 

/**\defgroup fcntl_lock_c 记录上锁
 * 记录上锁封装函数
 * @{
 */
 
/**brief 锁操作函数
 * 如果len=0 表示整个文件
 * \param fd -- 进程ID
 * \param cmd -- F_SETLK(不阻塞) or F_SETLKW(阻塞)
 * \param type -- 命令类型F_RDLCK,F_WRLCK,F_UNLCK
 * \param offset -- 记录偏移量,即上锁记录的开始位置,byte offset,relative to l_whence
 * \param whence -- 是以下之中的一个:SEEK_SET,SEEK_CUR,SEEK_END
 * \param len -- 记录的长度
 * \return -1 -- 错误
 * \return 其它 -- 成功
 */
int lock_reg(int fd,int cmd,int type,off_t offset,int whence,off_t len)
{
	struct flock lock;
	lock.l_type = type;
	lock.l_start = offset;
	lock.l_whence = whence;
	lock.l_len = len;
	return ( fcntl(fd,cmd,&lock));
}
/**brief 测试状态
 * 如果len=0 表示整个文件
 * \param fd -- 进程ID
 * \param type -- 命令类型F_RDLCK,F_WRLCK,F_UNLCK
 * \param offset -- 记录偏移量,即上锁记录的开始位置,byte offset,relative to l_whence
 * \param whence -- 是以下之中的一个:SEEK_SET,SEEK_CUR,SEEK_END
 * \param len -- 记录的长度
 * \return -1 -- 错误
 * \return 0 -- 没有锁定 
 * \return 其它 -- 已经锁,返回是拥有锁的进程ID
 */
pid_t lock_test(int fd, int type,off_t offset,int whence, off_t len)
{
	struct flock lock;
	lock.l_type = type;
	lock.l_start = offset;
	lock.l_whence = whence;
	lock.l_len = len;
	if (fcntl(fd,F_GETLK,&lock) == -1)
	  return (-1);
	if (lock.l_type == F_UNLCK)
	  return 0;
	return(lock.l_pid);
}
/** @} */

⌨️ 快捷键说明

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