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 + -
显示快捷键?