Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1279263
  • 博文数量: 168
  • 博客积分: 3483
  • 博客等级: 中校
  • 技术积分: 1696
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-06 13:17
文章分类

全部博文(168)

文章存档

2015年(6)

2014年(9)

2013年(47)

2012年(11)

2011年(13)

2010年(18)

2009年(11)

2008年(42)

2007年(11)

分类:

2008-03-19 20:24:33

#include
#include
#include
#include
#include
#include
#include
#include

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

static int
lockfile(int fd)
{
    struct flock fl;

    fl.l_type = F_WRLCK;
    fl.l_start = 0;
    fl.l_whence = SEEK_SET;
    fl.l_len = 0;
    return(fcntl(fd, F_SETLK, &fl));
}

int
already_running(char * lkfile)
{
    int     fd;
    char    buf[16];

    fd = open(lkfile, O_RDWR|O_CREAT, LOCKMODE);
    if (fd < 0) {
        syslog(LOG_ERR, "can't open %s: %s", lkfile, (char *)strerror(errno));
        exit(1);
    }
    if (lockfile(fd) < 0) {
        if (errno == EACCES || errno == EAGAIN) {
            close(fd);
            return(1);
        }
        syslog(LOG_ERR, "can't lock %s: %s", lkfile, (char *)strerror(errno));
        exit(1);
    }
    ftruncate(fd, 0);
    sprintf(buf, "%ld", (long)getpid());
    write(fd, buf, strlen(buf)+1);
    return(0);
}

参考 <>

阅读(2477) | 评论(0) | 转发(0) |
0

上一篇:daemonize函数

下一篇:readn 和 writen函数

给主人留下些什么吧!~~