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

📄 printif.c

📁 不用说了吧
💻 C
📖 第 1 页 / 共 2 页
字号:
voidfh_progname (format_data_t form, int argc, char *argv[]){  put_string (form, program_name);}voidfh_exit (format_data_t form, int argc, char *argv[]){  int err = 0;  if (argc > 0)    err = strtoul (argv[0], NULL, 0);  exit (err);}voidfh_name (format_data_t form, int argc, char *argv[]){  put_string (form, form->name);}voidfh_index_query (format_data_t form, int argc, char *argv[]){  select_arg (form, argc, argv,	      (if_nametoindex (form->name) == 0) ? 1 : 0);}voidfh_index (format_data_t form, int argc, char *argv[]){  int indx = if_nametoindex (form->name);  if (indx == 0)    {      fprintf (stderr, "%s: No index number found for interface `%s': %s\n",	       program_name, form->name, strerror (errno));      exit (EXIT_FAILURE);    }  *column += printf ("%i", indx);  had_output = 1;}voidfh_addr_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFADDR  if (ioctl (form->sfd, SIOCGIFADDR, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_addr (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFADDR  if (ioctl (form->sfd, SIOCGIFADDR, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFADDR failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_addr (form, argc, argv, &form->ifr->ifr_addr);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_netmask_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFNETMASK  if (ioctl (form->sfd, SIOCGIFNETMASK, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_netmask (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFNETMASK  if (ioctl (form->sfd, SIOCGIFNETMASK, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFNETMASK failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_addr (form, argc, argv, &form->ifr->ifr_netmask);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_brdaddr_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFBRDADDR#ifdef SIOCGIFFLAGS  int f;  if (0 == (f = if_nametoflag("BROADCAST"))      || (ioctl (form->sfd, SIOCGIFFLAGS, form->ifr) < 0)      || ((f & form->ifr->ifr_flags) == 0))    {      select_arg (form, argc, argv, 1);      return;    }#endif  if (ioctl (form->sfd, SIOCGIFBRDADDR, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_brdaddr (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFBRDADDR  if (ioctl (form->sfd, SIOCGIFBRDADDR, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFBRDADDR failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_addr (form, argc, argv, &form->ifr->ifr_broadaddr);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_dstaddr_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFDSTADDR#ifdef SIOCGIFFLAGS  int f;  if (0 == (f = if_nametoflag("POINTOPOINT"))      || (ioctl (form->sfd, SIOCGIFFLAGS, form->ifr) < 0)      || ((f & form->ifr->ifr_flags) == 0))    {      select_arg (form, argc, argv, 1);      return;    }#endif  if (ioctl (form->sfd, SIOCGIFDSTADDR, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_dstaddr (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFDSTADDR  if (ioctl (form->sfd, SIOCGIFDSTADDR, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFDSTADDR failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_addr (form, argc, argv, &form->ifr->ifr_dstaddr);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_mtu_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFMTU  if (ioctl (form->sfd, SIOCGIFMTU, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_mtu (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFMTU  if (ioctl (form->sfd, SIOCGIFMTU, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFMTU failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_int (form, argc, argv, form->ifr->ifr_mtu);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_metric_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFMETRIC  if (ioctl (form->sfd, SIOCGIFMETRIC, form->ifr) >= 0)    select_arg (form, argc, argv, (form->ifr->ifr_metric > 0) ? 0 : 1);  else#endif    select_arg (form, argc, argv, 1);}voidfh_metric (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFMETRIC  if (ioctl (form->sfd, SIOCGIFMETRIC, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFMETRIC failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    put_int (form, argc, argv, form->ifr->ifr_metric);#else  *column += printf ("(not available)");  had_output = 1;#endif}voidfh_flags_query (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFFLAGS  if (ioctl (form->sfd, SIOCGIFFLAGS, form->ifr) >= 0)    select_arg (form, argc, argv, 0);  else#endif    select_arg (form, argc, argv, 1);}voidfh_flags (format_data_t form, int argc, char *argv[]){#ifdef SIOCGIFFLAGS  if (ioctl (form->sfd, SIOCGIFFLAGS, form->ifr) < 0)    {      fprintf (stderr, "%s: SIOCGIFFLAGS failed for interface `%s': %s\n",	       program_name, form->ifr->ifr_name, strerror (errno));      exit (EXIT_FAILURE);    }  else    {      if (argc >= 1)	{	  if (! strcmp (argv[0], "number"))	    put_int (form, argc - 1, &argv[1], form->ifr->ifr_flags);	  else if (! strcmp (argv[0], "string"))	    put_flags (form, argc - 1, &argv[1], form->ifr->ifr_flags);	}      else	put_flags (form, argc, argv, form->ifr->ifr_flags);    }#else  *column += printf ("(not available)");  had_output = 1;#endif}voidprint_interfaceX (format_data_t form, int quiet){  const char *p = form->format;  const char *q;  form->depth++;  while (! (*p == '\0' || (form->depth > 1 && *p == '}')))    {      /* Echo until end of string or '$'.  */      while (! (*p == '$' || *p == '\0' || (form->depth > 1 && *p == '}')))	{	  quiet || (put_char (form, *p), 0);	  p++;	}      if (*p != '$')	break;      /* Look at next character.  If it is a '$' or '}', print that         and skip the '$'.  If it is something else than '{', print         both.  Otherwise enter substitution mode.  */      switch (*(++p))	{	default:	  quiet || (put_char (form, '$'), 0);	  /* Fallthrough. */	case '$':	case '}':	  quiet || (put_char (form, *p), 0);	  p++;	  continue;	  /* Not reached.  */	case '{':	  p++;	  break;	}      /* P points to character following '{' now.  */      q = strchr (p, '}');      if (!q)	{	  /* Without a following '}', no substitution at all can occure,	     so just dump the string that is missing.  */	  p -= 2;	  put_string (form, p);	  p = strchr (p, '\0');	  continue;	}      else	{	  char *id;	  id = alloca (q - p + 1);	  memcpy (id, p, q - p);	  id[q - p] = '\0';	  p = q + 1;	  /* We have now in ID the content of the first field, and	     in P the following string.  Now take the arguments. */	  if (quiet)	    {	      /* Just consume all arguments.  */	      form->format = p;	      while (*(form->format) == '{')		{		  form->format++;		  print_interfaceX (form, 1);		  if (*(form->format) == '}')		    form->format++;		}	      p = form->format;	    }	  else	    {	      int argc = 0;	      char **argv;	      argv = alloca (strlen (q) / 2);	      while (*p == '{')		{		  p++;		  form->format = p;		  print_interfaceX (form, 1);		  q = form->format;		  argv[argc] = malloc (q - p + 1);		  memcpy (argv[argc], p, q - p);		  argv[argc][q - p] = '\0';		  if (*q == '}')		    q++;		  p = q;		  argc++;		}	      format_handler (id, form, argc, argv);	      /* Clean up.  */	      form->format = p;	      while (--argc >= 0)		free (argv[argc]);	    }	}    }  form->format = p;  form->depth--;}voidprint_interface (int sfd, const char *name, struct ifreq *ifr,		 const char *format){  struct format_data form;  static int first_passed_already;  if (! ostream)    ostream = stdout;  if (! first_passed_already)    first_passed_already = form.first = 1;  else    form.first = 0;  form.name = name;  form.ifr = ifr;  form.format = format;  form.sfd = sfd;  form.depth = 0;  print_interfaceX (&form, 0);}

⌨️ 快捷键说明

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