?? printif.c
字號:
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 + -