lockfile.c
来自「用c++包装好的线程库,直接拿来使用,提高效率.」· C语言 代码 · 共 62 行
C
62 行
//// Implementation of lock for files//#include "LockFile.h"extern void Log(int, char *, ...);extern void Fatal(char *, ...);#define _(t) tLockFile::LockFile(){ isLocked = false; name = "";}LockFile::~LockFile(){ UnLock();}bool LockFile::Lock(const char *fname){ FILE *fp; const char *dn; int n; struct stat sbuf; Log(LOG_NOTICE, _("Locking file %s"), fname); dn = fname; if (dn = strrchr(fname, '/')) dn++; name = LOCK_DIR; name += "/LCK.."; name += dn; isLocked = false; if (stat(name.c_str(), &sbuf) != -1) { Log(LOG_WARNING, _("UUCP Lock file exists")); if ((fp = fopen(name.c_str(), "r")) != NULL) { fscanf(fp, "%10d\n", &n); fclose(fp); if (n == getpid()) return true; Log(LOG_ERR, _("Device %s locked by process %d"), dn, n); } return isLocked; } Log(LOG_DEBUG, _("Creating uucp lock %s"), name.c_str()); if ((fp = fopen(name.c_str(), "w")) == NULL) Fatal(_("Creating lock file %s"), name.c_str()); fprintf(fp, "%10d\n", getpid()); fclose(fp); return isLocked = true;}void LockFile::UnLock(){ Log(LOG_NOTICE, _("Unlocking %s"), name.c_str()); if (isLocked) unlink(name.c_str());}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?