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

📄 sundiagup.c

📁 操作系统SunOS 4.1.3版本的源码
💻 C
字号:
#ifndef	lintstatic	char sccsid[] = "@(#)sundiagup.c 1.1 92/07/30 Copyright Sun Micro";#endif#include <stdio.h>#include <errno.h>#include <signal.h>#define	ATTACH_TTY	"/tmp/sundiag.tty"#define	SUNDIAG_PID	"/tmp/sundiag.pid"extern	char	*fgets();extern	char	*ttyname();extern	char	*getenv();extern	FILE	*fopen();void handler()		/* signal handler for SIGTERM */{  (void)unlink(ATTACH_TTY);  exit(0);		/* exits gracefully */}main(argc, argv)int	argc;char	*argv[];{  FILE	*fp;  char	*msg, tmp[22];  char	*term_type;  int	pid=0;  if (argc == 1)			/* no command line argument */  {    fp = fopen(SUNDIAG_PID, "r");    if (fp == (FILE *)0)		/* no saved pid file */    {      fprintf(stderr,		"%s: Sundiag is not running in the background.\n", argv[0]);      exit(1);    }    else    {	pid = atoi(fgets(tmp, 20, fp));	if (strncmp(fgets(tmp, 20, fp), "TTY", 3) != 0)	{	  fprintf(stderr,		"%s: Sundiag is running in the SunView mode, can't grab.\n",		argv[0]);	  (void)fclose(fp);	  exit(1);	}	(void)fclose(fp);    }  }  else					/* ignore rest of the arg's for now */    if (strcmp(argv[1], "sd") != 0)      pid = atoi(argv[1]);  if (pid > 0)  {    fp = fopen(ATTACH_TTY, "w");    if (fp == (FILE *)0)    {	(void)fprintf(stderr,		"%s: Must be a super user to run Sundiag.\n", argv[0]);	exit(1);    }    (void)fprintf(fp, "%d\n%s", getpid(), ttyname(0));    term_type = getenv("TERM");    if (term_type != NULL)	(void)fprintf(fp, "\n%s", term_type);    (void)fclose(fp);    if (kill(pid, SIGUSR1) != 0)    {      switch (errno)      {	case EINVAL:	  msg = "Invalid signal number";	  break;	case ESRCH:	  msg = "Invalid process id";	  break;	case EPERM:	  msg = "Must be a super user to run Sundiag";	  break;	default:	  msg = "Failed restarting Sundiag";	  break;      }      (void)fprintf(stderr, "%s: %s.\n", argv[0], msg);      exit(0);    }    if (argc > 1)    {	fp = fopen(SUNDIAG_PID, "w");	/* write out the PID, for next time */	(void)fprintf(fp, "%d\nTTY\n", pid);	(void)fclose(fp);    }  }  (void)signal(SIGINT, SIG_IGN);  (void)signal(SIGHUP, SIG_IGN);  (void)signal(SIGTERM, handler);  while (1)    pause();		/* hold up the shell here until killed */}

⌨️ 快捷键说明

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