Fosdccf.blog.chinaunix.net
sdccf
全部博文(19283)
Linux酷软(214)
tmp(0)
PostgreSQL(93)
Solaris(383)
AIX(173)
SCOUNIX(575)
DB2(1005)
Shell(386)
C/C++(1187)
MySQL(1750)
Sybase(465)
Oracle(3695)
Informix(548)
HP-UX(0)
IBM AIX(2)
Sun Solaris(0)
BSD(1)
Linux(8597)
SCO UNIX(23)
2011年(1)
2009年(125)
2008年(19094)
2007年(63)
clifford
linky521
曾德标
fengzhan
leon_yu
mcuflowe
yt200902
guanyuji
GY123456
snow888
carlos94
丸喵喵
sean229
cxunix
可怜的猪
cqxc413
xzzgege
wb123456
分类: LINUX
2008-04-22 12:31:37
通过文件锁来实现,在程序运行的一开始,检查某文件是否存在,如果存在则说明改程序已经在运行了,如果不存在则利用open语句创建该文件,程序退出时关闭并删除此文件。 static char file_lock[sizeof(ctl_addr.sun_path)] = /var/run/file.pid; static bool file_lock_created = FALSE; static int create_lock(void) { int fd = open(file_lock, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH); if (fd < 0) { if (errno == EEXIST) { fprintf(stderr, "file: lock file \"%s\" already exists\n", file_lock); exit_file(10); } else { fprintf(stderr, "file: unable to create lock file \"%s\" (%d %s)\n" , file_lock, errno, strerror(errno)); exit_file(1); } } file_lock_created = TRUE; return fd; } static bool fill_lock(int lockfd) { char buf[30]; /* holds "\n" */ pid_t pid; int len; pid = getpid(); len = snprintf(buf, sizeof(buf), "%u\n", (unsigned int) pid); bool ok = len > 0 && write(lockfd, buf, len) == len; close(lockfd); return ok; } static void delete_lock(void) { if (file_lock_created) { //delete_ctl_socket(); unlink(file_lock); /* is noting failure useful? */ } }
通过文件锁来实现,在程序运行的一开始,检查某文件是否存在,如果存在则说明改程序已经在运行了,如果不存在则利用open语句创建该文件,程序退出时关闭并删除此文件。
static char file_lock[sizeof(ctl_addr.sun_path)] = /var/run/file.pid; static bool file_lock_created = FALSE; static int create_lock(void) { int fd = open(file_lock, O_WRONLY | O_CREAT | O_EXCL | O_TRUNC, S_IRUSR | S_IRGRP | S_IROTH); if (fd < 0) { if (errno == EEXIST) { fprintf(stderr, "file: lock file \"%s\" already exists\n", file_lock); exit_file(10); } else { fprintf(stderr, "file: unable to create lock file \"%s\" (%d %s)\n" , file_lock, errno, strerror(errno)); exit_file(1); } } file_lock_created = TRUE; return fd; } static bool fill_lock(int lockfd) { char buf[30]; /* holds "\n" */ pid_t pid; int len; pid = getpid(); len = snprintf(buf, sizeof(buf), "%u\n", (unsigned int) pid); bool ok = len > 0 && write(lockfd, buf, len) == len; close(lockfd); return ok; } static void delete_lock(void) { if (file_lock_created) { //delete_ctl_socket(); unlink(file_lock); /* is noting failure useful? */ } }
上一篇:Linux下automake软件编译与发布快速入门
下一篇:Linux操作系统下帐号管理命令及文件介绍
登录 注册