代码拉取完成,页面将自动刷新
同步操作将从 icesky1stm/Xipkpublib_Update 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
/*******************#XipFileLock#******************
*函 数 名: XipFileLock
*函数功能: 文件锁
*函数作者: zhangl
*版 本 号: 1.0.0
*创建日期: 20160318
fullname文件全路径
*修改标记: <1>
*修改人员: suitianmou
*修改日期: 2016.07.13
*修改内容:
将加锁、解锁和检查分成不同的函数
******************************************************/
#include "kernel/syspub.h"
#include "kernel/xipcmstc.h"
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/types.h>
int XipFileWRLock( char * fullname)
{
int fd = 0;
struct flock lock;
int ret = 0;
memset( &lock, 0x00, sizeof(lock));
if( fullname == NULL)
{
XIPLOG("E", "传入参数为NULL,不可以加/解/检查锁!");
return -5;
}
fd = open( fullname, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
if( fd <= 0)
{
XIPLOG("E", "打开文件错误!!![%s][%s]", fullname, strerror(errno));
return -10;
}
lock.l_type=F_WRLCK; /*读写锁*/
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
ret = fcntl( fd, F_SETLK, &lock);
if( ret < 0)
{
XIPLOG("E","文件加F_WRLCK锁失败[%s]!!", strerror(errno));
return -15;
}
memset( &lock, 0x00, sizeof( lock));
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
ret = fcntl( fd, F_GETLK, &lock);
/*不关闭文件,否则加锁失效*
close(fd);
**/
return 0;
}
#if 0 /*RD锁检查不出来TODO*/
int XipFileRDLock( char * fullname)
{
int fd = 0;
struct flock lock;
int ret = 0;
memset( &lock, 0x00, sizeof(lock));
if( fullname == NULL)
{
XIPLOG("E", "传入参数为NULL,不可以加/解/检查锁!");
return -5;
}
fd = open( fullname, O_RDONLY|O_CREAT, S_IRUSR|S_IWUSR);
if( fd <= 0)
{
XIPLOG("E", "打开文件错误!!![%s][%s]", fullname, strerror(errno));
return -10;
}
lock.l_type=F_RDLCK; /*只读锁*/
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
ret = fcntl( fd, F_SETLK, &lock);
if( ret < 0)
{
XIPLOG("E","文件加F_RDLCK锁失败[%s]!!", strerror(errno));
return -15;
}
/*不关闭文件,否则加锁失效*
close(fd);
**/
return 0;
}
#endif
int XipFileUNLock( char * fullname)
{
int fd = 0;
struct flock lock;
int ret = 0;
memset( &lock, 0x00, sizeof(lock));
if( fullname == NULL)
{
XIPLOG("E", "传入参数为NULL,不可以加/解/检查锁!");
return -5;
}
fd = open( fullname, O_WRONLY|O_CREAT, S_IRUSR|S_IWUSR);
if( fd <= 0)
{
XIPLOG("E", "打开文件错误!!![%s][%s]", fullname, strerror(errno));
return -10;
}
lock.l_type=F_UNLCK; /*解锁*/
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
ret = fcntl( fd, F_SETLK, &lock);
if( ret < 0)
{
XIPLOG("E","文件解锁失败[%s]!!", strerror(errno));
return -15;
}
/*解锁后关闭文件*/
close(fd);
return 0;
}
/**************************************
* 获取文件锁
* 返回: 0无文件锁, 1有读写文件锁
*
**************************************/
int XipFileChkLock( char *fullname )
{
int fd = 0;
struct flock lock;
int ret = 0;
memset( &lock, 0x00, sizeof(lock));
if( fullname == NULL)
{
XIPLOG("E", "传入参数为NULL,不可以加/解/检查锁!");
return -5;
}
fd = open( fullname, O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
if( fd <= 0)
{
XIPLOG("E", "打开文件错误!!![%s][%s]", fullname, strerror(errno));
return -10;
}
lock.l_start = 0;
lock.l_whence = SEEK_SET;
lock.l_len = 0;
ret = fcntl( fd, F_GETLK, &lock);
if( ret < 0)
{
XIPLOG("E","文件锁获取失败[%s]!!", strerror(errno));
return -15;
}
if (lock.l_type == F_WRLCK) /*读写锁*/
{
close(fd);
return 1;
}
else if( lock.l_type == F_RDLCK) /*只读锁*/
{
close(fd);
return 2;
}
/*关闭文件*/
close(fd);
return 0;
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。