locking.c

来自「GSM猫管理程序」· C语言 代码 · 共 84 行

C
84
字号
/*SMS Server Tools 3Copyright (C) Keijo Kasvihttp://smstools3.kekekasvi.com/Based on SMS Server Tools 2 from Stefan Fringshttp://www.meinemullemaus.de/This program is free software unless you got it under another license directlyfrom the author. You can redistribute it and/or modify it under the terms ofthe GNU General Public License as published by the Free Software Foundation.Either version 2 of the License, or (at your option) any later version.*/#include "locking.h"#include <sys/types.h>#include <sys/stat.h>#include <stdio.h>#include <string.h>#include <fcntl.h>#include <limits.h>#include <unistd.h>int lockfile( char*  filename){  char lockfilename[PATH_MAX +5];  int lockfile;  struct stat statbuf;  char pid[20];  if (!filename)    return 0;  if (strlen(filename) >= sizeof(lockfilename))    return 0;  strcpy(lockfilename,filename);  strcat(lockfilename,".LOCK");  if (stat(lockfilename,&statbuf))  {    lockfile=open(lockfilename,O_CREAT|O_EXCL|O_WRONLY,0644);    if (lockfile>=0)    {      sprintf(pid,"%i\n",(int)getpid());      write(lockfile,&pid,strlen(pid));      close(lockfile);      return 1;    }  }  return 0;}int islocked( char*  filename){  char lockfilename[PATH_MAX +5];  struct stat statbuf;  if (!filename)    return 0;  if (strlen(filename) >= sizeof(lockfilename))    return 0;  strcpy(lockfilename,filename);  strcat(lockfilename,".LOCK");  if (stat(lockfilename,&statbuf))    return 0;  return 1;}int unlockfile( char*  filename){  char lockfilename[PATH_MAX +5];  if (!filename)    return 0;  if (strlen(filename) >= sizeof(lockfilename))    return 0;  strcpy(lockfilename,filename);  strcat(lockfilename,".LOCK");  if (unlink(lockfilename))    return 0;  return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?