void *thread(void *vargp){ int connfd=*((int *)vargp); Pthread_detach(Pthread_self()); Free(vargp); doit(connfd); display_cache(cache_head); printf("return doit\n"); Close(connfd); return NULL; }
int main(int argc, char *argv[]) #endif { spcs_s_info_t ustats; struct timeval tout; fd_set readfds; char *errmessage, *ch; int c, period, prev; int count = 0, dflag = 0; int fd = fileno(stdin); errmessage = NULL; if (strcmp(argv[0], "sd_stats") != 0) errmessage = getenv("SD_STATS_USAGE"); if (errmessage == NULL) errmessage = gettext("Usage: sd_stats [-Mz] " "[-d delay_time] [-l logfile] [-r range]"); if (SDBC_IOCTL(SDBC_MAXFILES, &sdbc_max_devices, 0, 0, 0, 0, &ustats) == SPCS_S_ERROR) { if (ustats) { /* if SPCS_S_ERROR */ spcs_s_report(ustats, stderr); spcs_s_ufree(&ustats); } (void) fprintf(stderr, gettext("cannot get maxfiles\n")); exit(1); } on_off = calloc(sdbc_max_devices, sizeof (int)); dual_on_off = calloc(sdbc_max_devices, sizeof (int)); updates_prev = calloc(sdbc_max_devices, sizeof (int)); samples = calloc(sdbc_max_devices, sizeof (int)); rate_prev = calloc(sdbc_max_devices, sizeof (double)); cs_cur = malloc(sizeof (_sd_stats_t) + (sdbc_max_devices - 1) * sizeof (_sd_shared_t)); cs_prev = malloc(sizeof (_sd_stats_t) + (sdbc_max_devices - 1) * sizeof (_sd_shared_t)); cs_persec = malloc(sizeof (_sd_stats_t) + (sdbc_max_devices - 1) * sizeof (_sd_shared_t)); range = malloc(100); if (!on_off || !dual_on_off || !updates_prev || !samples || !rate_prev || !cs_cur || !cs_prev || !cs_persec || !range) { (void) fprintf(stderr, gettext("no free memory\n")); exit(1); } *range = '\0'; while ((c = getopt(argc, argv, "DMzd:l:r:h")) != EOF) { prev = c; switch (c) { case 'd': delay = atoi(optarg); ch = optarg; while (*ch != '\0') { if (!isdigit(*ch)) errflg++; ch++; } break; case 'l': logfd = open(optarg, O_CREAT|O_WRONLY|O_TRUNC, 0644); break; case 'r': ch = optarg; while (*ch != '\0') { if ((!isdigit(*ch)) && (*ch != ',') && (*ch != ':')) errflg++; ch++; } if (errflg) break; range = realloc((char *)range, (strlen(range) + strlen(optarg) + 1) * sizeof (char)); if (had_r_option) (void) strcat(range, ","); (void) strcat(range, optarg); had_r_option = 1; break; case 'z': if (SDBC_IOCTL(SDBC_ZAP_STATS, 0, 0, 0, 0, 0, &ustats) == SPCS_S_ERROR) { if (ustats) { spcs_s_report(ustats, stderr); spcs_s_ufree(&ustats); } } break; case 'D': dflag = 1; break; case 'M': mirror_sw = 1; break; case 'h': case '?': default : errflg++; break; } } if (errflg) { (void) fprintf(stderr, "%s\n", errmessage); exit(1); } else if (!prev) { if (argc > 1) { (void) fprintf(stderr, "%s\n", errmessage); exit(1); } } if (dflag) { exit(is_dirty()); } /* * A few curses routines to setup screen and tty interface */ (void) initscr(); (void) cbreak(); (void) noecho(); (void) nonl(); (void) erase(); (void) clear(); (void) refresh(); setup_ranges(range); /* * Set signal handle */ (void) sigset(SIGPIPE, leave); (void) sigset(SIGINT, leave); (void) sigset(SIGQUIT, leave); (void) signal(SIGFPE, leave); (void) signal(SIGSEGV, leave); USEC_INIT(); currtime = USEC_READ(); /* * Wait one second before reading the new values */ (void) sleep(1); /*CONSTCOND*/ while (1) { lasttime = currtime; currtime = USEC_READ(); /* * If less that 1 second, force it to one second */ if ((period = (currtime - lasttime) / 1000000) <= 0) period = 1; /* * Calculate new per/period values for statistics */ Elapsed_Time += period; /* * Display new statistics */ prheading(++count); if (mirror_sw) { if (dual_stats() < 0) mirror_sw = 0; } else if (toggle_total_sw) total_display(); else display_cache(); (void) move(0, 0); (void) refresh(); if (logfd > -1) wrefresh_file(stdscr, logfd); FD_ZERO(&readfds); FD_SET(fd, &readfds); tout.tv_sec = delay; for (;;) { tout.tv_usec = 0; if (select(fd + 1, &readfds, (fd_set *)0, (fd_set *)0, &tout) <= 0) break; if ((c = getch()) == EOF) { (void) sleep(delay); break; } checkbuf(c); tout.tv_sec = 0; } (void) erase(); } #pragma error_messages(off, E_STATEMENT_NOT_REACHED) return (0); #pragma error_messages(default, E_STATEMENT_NOT_REACHED) }
int main(int argc, char **argv) { int result = 0, mode = 0, c, nargs = 0, verbose = 0; char *args[3]; struct hostent *hp; int fd; #if I18N setlocale (LC_ALL, ""); bindtextdomain("net-tools", "/usr/share/locale"); textdomain("net-tools"); #endif /* Get a default hardware type. */ hardware = get_hwtype(DFLT_HW); do { c = getopt_long(argc, argv, "-ht:aHdsVvf", longopts, NULL); switch (c) { case EOF: break; case 'h': usage(); case 'V': fprintf(stderr, version_string); exit(E_VERSION); break; case 'v': verbose++; break; case 'a': case 's': case 'd': if (mode) { fprintf(stderr, _("%s: illegal option mix.\n"), argv[0]); usage(); } else { mode = (c == 'a' ? MODE_DISPLAY : (c == 'd' ? MODE_DELETE : MODE_SET)); } break; case 'f': mode = MODE_ETHERS; break; case 'H': case 't': if (optarg) { hardware = get_hwtype(optarg); } else { usage(); } break; case 1: if (nargs == 2) { usage(); exit(1); } else { args[nargs++] = optarg; } break; default: usage(); } } while (c != EOF); if (hardware == NULL) { fprintf(stderr, _("rarp: %s: unknown hardware type.\n"), optarg); exit(1); } switch (mode) { case 0: usage(); case MODE_DISPLAY: if (nargs != (mode - 1)) { usage(); } result = display_cache(); break; case MODE_DELETE: case MODE_SET: if (nargs != (mode - 1)) { usage(); } if ((hp = gethostbyname(args[0])) == NULL) { fprintf(stderr, _("rarp: %s: unknown host\n"), args[0]); exit(1); } if (fd = socket(PF_INET, SOCK_DGRAM, 0), fd < 0) { perror("socket"); exit(1); } result = (mode == MODE_DELETE) ? rarp_delete(fd, hp) : rarp_set(fd, hp, args[1]); close(fd); break; case MODE_ETHERS: if (nargs != 0 && nargs != 1) usage(); if (fd = socket(PF_INET, SOCK_DGRAM, 0), fd < 0) { perror("socket"); exit(1); } result = rarp_file(fd, nargs ? args[0] : _PATH_ETHERS); close(fd); } exit(result); }