zoukankan
html css js c++ java
(转)linux用文件锁实现保证一个程序只能启动一个进程
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
int main(int argc,char* argv[])
{
int fd;
int lock_result;
struct flock lock;
char * pFileName = "tmp.lck";
fd = open(pFileName,O_RDWR);
if(fd<0)
{
printf("Open file failed. ");
return 1;
}
lock_result = lockf(fd,F_TEST,0); //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
//返回0表示未加锁或者被当前进程加锁;返回-1表示被其他进程加锁
if(lock_result<0)
{
perror("Exec lockf function failed. ");
return 1;
}
lock_result = lockf(fd,F_LOCK,0); //参数使用F_LOCK,则如果已经加锁,则阻塞到前一个进程释放锁为止,参数0表示对整个文件加锁
if(lock_result<0)
{
perror("Exec lockf function failed. ");
return 1;
}
printf("Pid: %ld process locked the file. ",(long)getpid());
//do something
while(getchar()<0);
printf("Pid: %ld process release the file. ",(long)getpid());
return 0;
}
查看全文
相关阅读:
class和struct
类内初始值(c++11)
默认初始化、值初始化
聚合类
对象
排序算法的比较
快速排序
堆排序
ubunu设置java命令为全局的命令-添加到全局环境变量
Mina笔记
原文地址:https://www.cnblogs.com/lihaiping/p/4554802.html
最新文章
P2617 Dynamic Rankings
python全栈开发基础【第二十五篇】死锁,递归锁,信号量,Event事件,线程Queue
python全栈开发基础【第二十四篇】(利用threading模块开线程、join与守护线程、GIL与Lock)
python全栈开发基础【第二十三篇】线程
python全栈开发基础【第二十二篇】进程池和回调函数
python全栈开发基础【第二十篇】利用multiprocessing模块开进程
python全栈开发基础【第十九篇】进程
python全栈开发基础【补充】解决tcp粘包
python全栈开发基础【第十八篇】网络编程(socket)
python全栈开发基础【补充】metaclass(元类)
热门文章
python全栈开发基础【补充】异常处理
python基础之集合,字符编码
python基础之数据类型之元组和字典
python基础之数据类型之数字、字符串、列表
python基础之if,while,for
python基础之数据类型,交互,格式化输出,基本运算符
操作系统介绍、python基础
计算机基础
拷贝构造函数
转换构造函数
Copyright © 2011-2022 走看看