/* a program that performs simple operations */ int main(int ac, char **av) { int (*operation)(int, int); int first_number; int second_number; char symbol; int result; if (!check_arguments_valid(ac) || !check_if_number(av[1]) || !check_if_number(av[3]) || !check_if_symbol(av[2])) { printf("Program exiting.\n"); return (1); } first_number = atoi(av[1]); second_number = atoi(av[3]); symbol = av[2][0]; /* select the appropriate function based on the operator symbol */ operation = get_op_func(symbol); result = (*operation)(first_number, second_number); printf("%d\n", result); return (0); }
int main(int argc, char **argv) { if (argc < 2) return 1; printf("%d\n", check_if_number(argv[1])); return 0; }
void pidaux () { DIR *dirp; FILE *fp; struct dirent *entry; char path[MAX_BUF], read_buf[MAX_BUF],temp_buf[MAX_BUF]; char uid_int_str[INT_SIZE_BUF]={0},*line; char uptime_str[UP_TIME_SIZE]; char *user,*command; size_t len=0; dirp = opendir ("/proc/"); if (dirp == NULL) { perror ("Fail"); exit(0); } strcpy(path,"/proc/"); strcat(path,"uptime"); fp=fopen(path,"r"); if(fp!=NULL) { getline(&line,&len,fp); sscanf(line,"%s ",uptime_str); } long uptime=atof(uptime_str); long Hertz=sysconf(_SC_CLK_TCK); strcpy(path,"/proc/"); strcat(path,"meminfo"); fp=fopen(path,"r"); unsigned long long total_memory; if(fp!=NULL) { getline(&line,&len,fp); sscanf(line,"MemTotal: %llu kB",&total_memory); } while ((entry = readdir (dirp)) != NULL) { if (check_if_number (entry->d_name)) { strcpy(path,"/proc/"); strcat(path,entry->d_name); strcat(path,"/status"); unsigned long long memory_rss; fp=fopen(path,"r"); unsigned long long vmsize; if(fp!=NULL) { vmsize=0; getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"Uid: %s ",uid_int_str); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"VmSize: %llu kB",&vmsize); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"VmRSS: %llu kB",&memory_rss); } else { fprintf(stdout,"FP is NULL\n"); } float memory_usage=100*memory_rss/total_memory; strcpy(path,"/proc/"); strcat(path,entry->d_name); strcat(path,"/stat"); fp=fopen(path,"r"); getline(&line,&len,fp); char comm[10],state; unsigned int flags; int pid,ppid,pgrp,session,tty_nr,tpgid; unsigned long minflt,cminflt,majflt,cmajflt,utime,stime; unsigned long long starttime; long cutime,cstime,priority,nice,num_threads,itreavalue; sscanf(line,"%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu",&pid,comm,&state,&ppid,&pgrp,&session,&tty_nr,&tpgid,&flags,&minflt,&cminflt,&majflt,&cmajflt,&utime,&stime,&cutime,&cstime,&priority,&nice,&num_threads,&itreavalue,&starttime); unsigned long total_time=utime+stime; total_time=total_time+(unsigned long)cutime+(unsigned long)cstime; float seconds=uptime-(starttime/Hertz); float cpu_usage=100*((total_time/Hertz)/seconds); if(isnan(cpu_usage)) { cpu_usage=0.0; } if(isnan(memory_usage)) { memory_usage=0.0; } strcpy (path, "/proc/"); strcat (path, entry->d_name); strcat (path, "/comm"); fp = fopen (path, "r"); if (fp != NULL) { fscanf (fp, "%s", read_buf); fclose(fp); } char *userName=getUserName(atoi(uid_int_str)); if(strlen(userName)<9) { user=userName; } else { user=uid_int_str; } fprintf(stdout,"%s %s %0.1f %0.1f %llu %llu %c %s\n",user,entry->d_name,cpu_usage,memory_usage,vmsize,memory_rss,state,read_buf); } } closedir (dirp); }
int *pidof (char *pname) { DIR *dirp; FILE *fp; struct dirent *entry; int *pidlist, pidlist_index = 0, pidlist_realloc_count = 1; char path[MAX_BUF], read_buf[MAX_BUF]; dirp = opendir ("/proc/"); if (dirp == NULL) { perror ("Fail"); return NULL; } pidlist = malloc (sizeof (int) * PID_LIST_BLOCK); if (pidlist == NULL) { return NULL; } while ((entry = readdir (dirp)) != NULL) { if (check_if_number (entry->d_name)) { strcpy (path, "/proc/"); strcat (path, entry->d_name); strcat (path, "/comm"); /* A file may not exist, it may have been removed. * due to termination of the process. Actually we need to * make sure the error is actually file does not exist to * be accurate. */ fp = fopen (path, "r"); if (fp != NULL) { fscanf (fp, "%s", read_buf); if (strcmp (read_buf, pname) == 0) { /* add to list and expand list if needed */ pidlist[pidlist_index++] = atoi (entry->d_name); if (pidlist_index == PID_LIST_BLOCK * pidlist_realloc_count) { pidlist_realloc_count++; pidlist = realloc (pidlist, sizeof (int) * PID_LIST_BLOCK * pidlist_realloc_count); //Error check todo if (pidlist == NULL) { return NULL; } } } fclose (fp); } } } closedir (dirp); pidlist[pidlist_index] = -1; /* indicates end of list */ return pidlist; }
void pidaux () { DIR *dirp; FILE *fp; struct dirent *entry; char path[MAX_BUF], read_buf[MAX_BUF],temp_buf[MAX_BUF]; char uid_int_str[INT_SIZE_BUF]={0},*line; char uptime_str[UP_TIME_SIZE]; char *user,*command; size_t len=0; dirp = opendir ("/proc/"); if (dirp == NULL) { perror ("Fail"); exit(0); } strcpy(path,"/proc/"); strcat(path,"uptime"); fp=fopen(path,"r"); if(fp!=NULL) { getline(&line,&len,fp); sscanf(line,"%s ",uptime_str); } long uptime=atof(uptime_str); long Hertz=sysconf(_SC_CLK_TCK); strcpy(path,"/proc/"); strcat(path,"meminfo"); fp=fopen(path,"r"); unsigned long long total_memory; if(fp!=NULL) { getline(&line,&len,fp); sscanf(line,"MemTotal: %llu kB",&total_memory); } fprintf(stdout,"USER\t PID CPU %MEM VSZ RSS STAT START COMMAND\n"); while ((entry = readdir (dirp)) != NULL) { if (check_if_number (entry->d_name)) { char fmt_time[20]; strcpy(path,"/proc/"); strcat(path,entry->d_name); struct stat info; stat(path,&info); struct tm * timeinfo = localtime(&info.st_ctime); // or gmtime() depending on what you want char t_info[20]; strftime(t_info,20,"%H:%M",timeinfo); strcat(path,"/status"); unsigned long long memory_rss; fp=fopen(path,"r"); unsigned long long vmsize; //fprintf(stdout,"%s ",entry->d_name); if(fp!=NULL) { vmsize=0; getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"Uid: %s ",uid_int_str); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"VmSize: %llu kB",&vmsize); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); getline(&line,&len,fp); sscanf(line,"VmRSS: %llu kB",&memory_rss); //fprintf(stdout,"VmRSS::%llu",memory_rss); } else { fprintf(stdout,"FP is NULL\n"); } float memory_usage=100*memory_rss/total_memory; strcpy(path,"/proc/"); strcat(path,entry->d_name); strcat(path,"/stat"); //getline(&line,&len,fp); fp=fopen(path,"r"); getline(&line,&len,fp); char comm[10],state; unsigned int flags; int pid,ppid,pgrp,session,tty_nr,tpgid; unsigned long minflt,cminflt,majflt,cmajflt,utime,stime; unsigned long long starttime; long cutime,cstime,priority,nice,num_threads,itreavalue; sscanf(line,"%d %s %c %d %d %d %d %d %u %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu",&pid,comm,&state,&ppid,&pgrp,&session,&tty_nr,&tpgid,&flags,&minflt,&cminflt,&majflt,&cmajflt,&utime,&stime,&cutime,&cstime,&priority,&nice,&num_threads,&itreavalue,&starttime); unsigned long total_time=utime+stime; total_time=total_time+(unsigned long)cutime+(unsigned long)cstime; float seconds=uptime-(starttime/Hertz); float cpu_usage=100*((total_time/Hertz)/seconds); if(isnan(cpu_usage)) { cpu_usage=0.0; } if(isnan(memory_usage)) { memory_usage=0.0; } strcpy (path, "/proc/"); strcat (path, entry->d_name); strcat (path, "/comm"); /* A file may not exist, it may have been removed. * dut to termination of the process. Actually we need to * make sure the error is actually file does not exist to * be accurate. */ fp = fopen (path, "r"); if (fp != NULL) { fscanf (fp, "%s", read_buf); fclose(fp); } char *userName=getUserName(atoi(uid_int_str)); if(strlen(userName)<9) { user=userName; } else { user=uid_int_str; } fprintf(stdout,"%-8s %5d %2.1f %2.1f %7llu %7llu %c \t %s %-s\n",user,atoi(entry->d_name),cpu_usage,memory_usage,vmsize,memory_rss,state,t_info,read_buf); } } closedir (dirp); }