int main(int argc,char **argv) { uint64_t start,end; char path[MAX_PATH_LEN + 1] = "/bin/"; if(argc < 2 || isHelpCmd(argc,argv)) usage(argv[0]); strcat(path,argv[1]); if(signal(SIGINT,sigHdlr) == SIG_ERR) error("Unable to set sig-handler for signal %d",SIGINT); start = rdtsc(); if((waitingPid = fork()) == 0) { size_t i; const char **args = (const char**)malloc(sizeof(char*) * (argc - 1)); if(!args) error("Not enough mem"); for(i = 1; i < (size_t)argc; i++) args[i - 1] = argv[i]; args[argc - 1] = NULL; execvp(args[0],args); error("Exec failed"); } else if(waitingPid < 0) error("Fork failed"); else { sExitState state; int res; while(1) { res = waitchild(&state,-1); if(res != -EINTR) break; } end = rdtsc(); if(res < 0) error("Wait failed"); fprintf(stderr,"\n"); fprintf(stderr,"Process %d (%s) terminated with exit-code %d\n",state.pid,path,state.exitCode); if(state.signal != SIG_COUNT) fprintf(stderr,"It was terminated by signal %d\n",state.signal); fprintf(stderr,"Runtime: %Lu us\n",state.runtime); fprintf(stderr,"Realtime: %Lu us\n",tsctotime(end - start)); fprintf(stderr,"Scheduled: %lu times\n",state.schedCount); fprintf(stderr,"Syscalls: %lu\n",state.syscalls); fprintf(stderr,"Migrations: %lu\n",state.migrations); fprintf(stderr,"Own mem: %lu KiB\n",state.ownFrames * 4); fprintf(stderr,"Shared mem: %lu KiB\n",state.sharedFrames * 4); fprintf(stderr,"Swapped: %lu KiB\n",state.swapped * 4); } return EXIT_SUCCESS; }
int main(int argc,char *argv[]) { size_t i; if(argc < 2 || isHelpCmd(argc,argv)) { fprintf(stderr,"Usage: %s <module> [...]\n",argv[0]); fprintf(stderr," Available modules:\n"); for(i = 0; i < ARRAY_SIZE(modules); i++) fprintf(stderr," %s\n",modules[i].name); return EXIT_FAILURE; } for(i = 0; i < ARRAY_SIZE(modules); i++) { if(strcmp(argv[1],modules[i].name) == 0) return modules[i].func(argc,argv); } fprintf(stderr,"Module '%s' does not exist\n",argv[1]); return EXIT_FAILURE; }
int main(int argc,char **argv) { char *fmt = (char*)"%c"; char str[MAX_DATE_LEN]; time_t now; struct tm *date; if((argc != 1 && argc != 2) || isHelpCmd(argc,argv)) { fprintf(stderr,"Usage: %s [<format>]\n",argv[0]); fprintf(stderr," <format> may be anything that dateToString() accepts\n"); return EXIT_FAILURE; } /* use format from argument? */ if(argc == 2) fmt = argv[1]; now = time(NULL); date = gmtime(&now); strftime(str,sizeof(str),fmt,date); puts(str); return EXIT_SUCCESS; }