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

📄 logout.c

📁 压缩包中包含LINUX下多个命令的源码
💻 C
字号:
/* A version of bsd `logout' that should be widely portable   Copyright (C) 1996, 2000 Free Software Foundation, Inc.   Written by Miles Bader <miles@gnu.ai.mit.edu>   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, 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., 675 Mass Ave, Cambridge, MA 02139, USA.  */#ifdef HAVE_CONFIG_H#include <config.h>#endif#include <unistd.h>#include <sys/types.h>#ifdef TIME_WITH_SYS_TIME# include <sys/time.h># include <time.h>#else# ifdef HAVE_SYS_TIME_H#  include <sys/time.h># else#  include <time.h># endif#endif#include <utmp.h>#include <fcntl.h>intlogout (char *line){  int success = 0;#ifdef HAVE_SETUTENT		/* sysvish version */  struct utmp *ut, search;#ifdef HAVE_UTMPNAME  if (! utmpname (PATH_UTMP))    return 0;#endif  setutent ();#ifdef HAVE_STRUCT_UTMP_UT_TYPE  search.ut_type = USER_PROCESS;#endif  strncpy (search.ut_line, line, sizeof search.ut_line);  ut = getutline (&search);  if (ut)    {#ifdef HAVE_STRUCT_UTMP_UT_HOST      bzero (ut->ut_host, sizeof ut->ut_host);#endif#ifdef HAVE_STRUCT_UTMP_UT_TV      gettimeofday (&ut->ut_tv, NULL);#else      time (&ut->ut_time);#endif      if (pututline (ut) >= 0)	success = 1;      endutent ();    }#else /* !HAVE_SETUTENT */#ifdef HAVE_GETUXLINE  /* Strange utmpx version */  struct utmpx *ut, search;  strncpy (search.ut_line, line, sizeof (search.ut_line));  ut = getutxline (&search);  if (ut)    {      ut->ut_type = DEAD_PROCESS;      ut->ut_exit.e_termination = 0;      ut->ut_exit.e_exit = 0;#ifdef HAVE_GETTIMEOFDAY      gettimeofday (&ut->ut_tv, NULL);#else      time (&ut->ut_tv.tv_sec);      ut->ut_tv.tv_usec = 0;#endif      modutx (ut);      success = 1;  }  endutxent();#else /* !HAVE_GETUTXLINE */  /* Old bsdish version */  int ut_fd;  ut_fd = open (PATH_UTMP, O_RDWR);  if (ut_fd >= 0)    {      struct utmp *ut;      struct utmp ut_buf[100];      off_t pos = 0;		/* Position in file */      int rd;      while (!success && (rd = read (ut_fd, ut_buf, sizeof ut_buf)) > 0)	{	  struct utmp *ut_end = (struct utmp *)((char *)ut_buf + rd);	  for (ut = ut_buf; ut < ut_end; ut++, pos += sizeof *ut)	    if (ut->ut_name[0]		&& strncmp (ut->ut_name, line, sizeof ut->ut_line) == 0)	      /* Found the entry for LINE; mark it as logged out.  */	      {		/* Zero out entries describing who's logged in.  */		bzero (ut->ut_name, sizeof ut->ut_name);#ifdef HAVE_STRUCT_UTMP_UT_HOST		bzero (ut->ut_host, sizeof ut->ut_host);#endif#ifdef HAVE_STRUCT_UTMP_UT_TV		gettimeofday (&ut->ut_tv, NULL);#else		time (&ut->ut_time);#endif		/* Now seek back to the position in utmp at which UT occured,		   and write the new version of UT there.  */		if (lseek (ut_fd, pos, SEEK_SET) >= 0		    && write (ut_fd, (char *)ut, sizeof (*ut)) == sizeof (*ut))		  {		    success = 1;		    break;		  }	      }	}      close (ut_fd);    }#endif /* HAVE_GETUTXLINE */#endif /* HAVE_SETUTENT */  return success;}

⌨️ 快捷键说明

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