注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

绿色圣光

~生活·自愚自乐~

 
 
 

日志

 
 

一个简单的文件锁  

2013-08-24 19:41:33|  分类: 个人作品 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

又是好久没写日志了,现在的日子真的不能叫生活,只能算得上是活着。现在的我,都已经不认识自己了。唉~还是贴点代码算了。

也许是自己的水平提高了,现在看自己维护的老项目的产品代码,越来越不顺眼了。于是,趁着出差这段时间,把代码里的一小部分大改了一番。其中,需要给几个进程写 daemon 程序,需要用到文件锁,所以就有了下面这段代码。

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

#include "file_lock.h"

#define PID_BUF_LEN 16
#define LOCKMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH)


int lock_file(int fd)
{
struct flock fl;

fl.l_type = F_WRLCK;
fl.l_whence = SEEK_SET;
fl.l_start = 0;
fl.l_len = 0;

return (fcntl(fd, F_SETLK, &fl));
}

int is_locked(const char *file_name)
{
int fd;
char buf[PID_BUF_LEN];

fd = open(file_name, O_RDWR | O_CREAT, LOCKMODE);
if (fd < 0)
{
printf("can't open %s: %m\n", file_name);
return -1;
}

if (lock_file(fd) < 0)
{
printf("lock %s failed: %m\n", file_name);
close(fd);
return -1;
}

ftruncate(fd, 0);

memset(buf, 0, PID_BUF_LEN);
sprintf(buf, "%d\n", getpid());

write(fd, buf, PID_BUF_LEN);

return fd;
}

都毕业两年了,还只能写出这种代码来,还说自己水平提高了,提高个屁啊!掩面泪奔……

  评论这张
 
阅读(610)| 评论(4)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017