⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lockfile.c

📁 multi-line Adjunct Communication Server
💻 C
字号:
/*** Copyright (C) 1999-2000 Open System Telecom Corporation.**  ** This program is free software; you can redistribute it and/or modify** it under the terms of the GNU General Public License as published by** the Free Software Foundation; either version 2 of the License, or** (at your option) any later version.** ** This program is distributed in the hope that it will be useful,** but WITHOUT ANY WARRANTY; without even the implied warranty of** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the** GNU General Public License for more details.** ** You should have received a copy of the GNU General Public License** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.**** As a special exception to the GNU General Public License, permission is** granted for additional uses of the text contained in its release** of ACS as noted here.**** This exception is that permission is hereby granted to link ACS with** the Pika MonteCarlo static libraries to produce a executable image** without requiring MonteCarlo itself to be supplied in source form so** long as each source file so linked contains this exclusion.**** This exception does not however invalidate any other reasons why** the resulting executable file might be covered by the GNU General** public license or invalidate the licensing requirements of any** other component or library.**** This exception applies only to the code released by OST under the** name ACS.  If you copy code from other releases into a copy of** ACS, as the General Public License permits, the exception does not** apply to the code that you add in this way.  To avoid misleading** anyone as to the status of such modified files, you must delete** this exception notice from them.**** If you write modifications of your own to ACS, it is your choice** whether to permit this exception to apply to your modifications.** If you do not wish that, delete this exception notice, at which** point the terms of your modification would be covered under the GPL** as explicitly stated in "COPYING".*/#include <config.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <errno.h>#include <sys/stat.h>#include <lockfile.h>#ifndef	_LOCK_FORMAT#define	_LOCK_FORMAT	"%010d %s"#endifint	lockfile(const char *fpath, const char *option){	int	fd;	int	status;	pid_t	pid;	time_t	now;	struct	stat	ino;	int	len;	int	mask;	char	query[65];	if(!option)		option = "";	for(;;)	{		fd = open(fpath, O_WRONLY | O_CREAT | O_EXCL, 0660);		if(fd > 0)		{			pid = getpid();			if(!strcmp(option, "disable"))				pid = 1;			sprintf(query, _LOCK_FORMAT, pid, option);			write(fd, query, strlen(query));			close(fd);			return 0;		}		if(fd < 0 && errno != EEXIST)			return -1;		fd = open(fpath, O_RDONLY);		if(fd < 0)		{			if(errno == ENOENT)				continue;			return -1;		}		sleep(2);		status = read(fd, query, sizeof(query) - 1);		if(status < 1)		{			close(fd);			continue;		}		query[status] = 0;		pid = atoi(query);		if(pid)		{			if(pid == getpid())			{				status = -1;				errno = 0;			}			else				status = kill(pid, 0);			if(!status || (errno == EPERM))			{				close(fd);				return pid;			}		}			close(fd);					unlink(fpath);	}}

⌨️ 快捷键说明

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