当前位置: 首页 > news >正文

linux程序文件上锁,Linux下对文件的某一记录进行上锁

/*************************************************************

FileName : LockFile.c

FileFunc : 实现文件的记录锁,对文件中的值进行加1

Version : V0.1

Author : Study

Date : 2012-05-11

Descp : Linux下对文件的某一记录进行上锁

*************************************************************/

#include

#include

#include

#include

#include

int LockInit(char *pathname);

int LockWait();

intLockRelease();

long GetLocalSerial(char* ptrLocalSerial);

#define FILE_MODE (S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH)

static struct flocklock_it, unlock_it;

static int lock_fd = -1;

int LockInit(char *pathname)

{

char lock_file[150];

memset(lock_file,0,sizeof(lock_file));

strncpy(lock_file,pathname,sizeof(lock_file));

mkstemp(lock_file);

if((lock_fd=open(lock_file,O_CREAT|O_WRONLY,FILE_MODE))<0)

{

perror("open");

return -1;

}

printf("LockInit:lock_fd = %d \n",lock_fd);

unlink(lock_file);

lock_it.l_type=F_WRLCK;

lock_it.l_whence=SEEK_SET;

lock_it.l_start=0;

lock_it.l_len=0;

unlock_it.l_type=F_UNLCK;

unlock_it.l_whence=SEEK_SET;

unlock_it.l_start=0;

unlock_it.l_len=0;

return 0;

}

int LockWait()

{

intrc;

while((rc=fcntl(lock_fd,F_SETLKW,&lock_it))<0)

{

printf("LockWait:rc = %d \n",rc);

if(errno==EINTR)

continue;

else

return -1;

}

return 0;

}

int LockRelease()

{

if(fcntl(lock_fd, F_SETLKW, &unlock_it)<0)

return -1;

return 0;

}

long GetLocalSerial(char* ptrLocalSerial)

{

char tmp1[100];

char buf[100];

int fd,iRetCode;

long iMaxSerial;

memset(tmp1,0,sizeof(tmp1));

//sprintf(tmp1,"%s/etc/serialfile",getenv("HOME"));

sprintf(tmp1,"%s/serialfile",getenv("PWD"));

printf("tmp1 = %s \n",tmp1);

LockInit("./tmp");

fd=open(tmp1,O_RDWR);

printf("GetLocalSerial:fd = %d \n",fd);

memset(buf,0,sizeof(buf));

iRetCode=LockWait();

printf("GetLocalSerial:iRetCode = %d \n",iRetCode);

read(fd,buf,6);

iMaxSerial=strtol(buf,0,10)+1;

if(iMaxSerial==999999)

iMaxSerial=0;

sprintf(ptrLocalSerial,"%06ld",iMaxSerial);

lseek(fd,0,0);

write(fd,ptrLocalSerial,6);

close(fd);

iRetCode=LockRelease();

return iMaxSerial;

}

int main(int argc,char *argv[])

{

long lSerialNumber;

char szSerialNumber[30];

memset(szSerialNumber,0,sizeof(szSerialNumber));

lSerialNumber = GetLocalSerial(szSerialNumber);

printf("lSerialNumber = %d \n",lSerialNumber);

return 0;

}

相关文章:

  • Linux中通过缓存DNS的解析来提高上网的响应速度!
  • 在linux安装java环境变量配置,在linux安装java环境变量配置
  • linux centos7服务器时间,centos7.2_x64搭建ntp时间服务器
  • 利用ubint安装Linux到u盘,Ubuntu12.04安装到U盘里
  • 大年三神
  • rtl8723BS网卡linux,关于 RTL8723BS 与此同时开启 STA/AP 模式
  • 我为什么选用转码的方式调整码率
  • yunos运行linux程序,YunOS开放平台
  • linux xtrabackup备份恢复,xtrabackup 备份和恢复docker容器内的mysql
  • Free Mind 06年2月 SourceForge 推荐项目
  • linux异常断电检查,linux断电后,出现fsck失败的解决方法
  • 【FreeMind】简介信息
  • 深度Linux怎样关闭休眠,linux内核是如何支持深度睡眠(deep sleep)方式的?
  • Freemind中文汉化版0.8.0b4
  • linux sendmail 实现 outlook 功能,利用sendmail简单实现域内、域间邮件收发(linux5.4)...
  • python3.6+scrapy+mysql 爬虫实战
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • ES10 特性的完整指南
  • ES6 ...操作符
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Javascript Math对象和Date对象常用方法详解
  • leetcode388. Longest Absolute File Path
  • LeetCode算法系列_0891_子序列宽度之和
  • miaov-React 最佳入门
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • node和express搭建代理服务器(源码)
  • python docx文档转html页面
  • ReactNative开发常用的三方模块
  • Redis提升并发能力 | 从0开始构建SpringCloud微服务(2)
  • Vue--数据传输
  • 聚类分析——Kmeans
  • 理清楚Vue的结构
  • 驱动程序原理
  • 学习使用ExpressJS 4.0中的新Router
  • # 飞书APP集成平台-数字化落地
  • #NOIP 2014# day.1 T2 联合权值
  • #图像处理
  • (20)目标检测算法之YOLOv5计算预选框、详解anchor计算
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Python) SOAP Web Service (HTTP POST)
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (转) SpringBoot:使用spring-boot-devtools进行热部署以及不生效的问题解决
  • (转)linux下的时间函数使用
  • (转)mysql使用Navicat 导出和导入数据库
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .libPaths()设置包加载目录
  • .NET Core 版本不支持的问题
  • .NET Core引入性能分析引导优化
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .net 反编译_.net反编译的相关问题