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

📄 myipc.h

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

#ifndef  MY_IPC_H
#define  MY_IPC_H

#include <stdlib.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/stat.h>

/**\defgroup fcntl_lock_h 记录上锁
 * 记录上锁封装函数和宏定义
 * @{
 */

int lock_reg(int fd,int cmd,int type,off_t offset,int whence,off_t len);
pid_t lock_test(int fd, int type,off_t offset,int whence, off_t len);
/**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 -- 记录的长度
 * 示例 zm_writew_lock(fd,0,SEEK_SET,0)
 * 示例 zm_un_lock(fd,0,SEEK_SET,0)
 */
///读记录上锁(不阻塞),返回-1--错误 
#define	zm_read_lock(fd,offset,whence,len) \
        lock_reg(fd,F_SETLK,F_RDLCK,offset,whence,len)
///读记录上锁(阻塞),返回-1--错误
#define	zm_readw_lock(fd,offset,whence,len) \
        lock_reg(fd,F_SETLKW,F_RDLCK,offset,whence,len)
///写记录上锁(不阻塞),返回-1--错误
#define	zm_write_lock(fd,offset,whence,len) \
        lock_reg(fd,F_SETLK,F_WRLCK,offset,whence,len)
///写记录上锁(不阻塞),返回-1--错误
#define	zm_writew_lock(fd,offset,whence,len) \
        lock_reg(fd,F_SETLKW,F_WRLCK,offset,whence,len)
///释放锁,返回-1--错误
#define	zm_un_lock(fd,offset,whence,len) \
        lock_reg(fd,F_SETLK,F_UNLCK,offset,whence,len)
///读记录锁的状态,返回-1 -- 错误 0 -- 没有锁定 其它 -- 已经锁,返回是拥有锁的进程ID
#define	zm_is_read_lockable(fd,offset,whence,len) \
        !lock_test(fd,F_RDLCK,offset,whence,len)
///写记录锁的状态,返回-1 -- 错误 0 -- 没有锁定 其它 -- 已经锁,返回是拥有锁的进程ID
#define	zm_is_write_lockable(fd,offset,whence,len) \
        !lock_test(fd,F_WRLCK,offset,whence,len)
 /** @} */
        
#endif

⌨️ 快捷键说明

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