int main (int argc, char **argv) { if( argc != 2 ) { die_sans_errno( "Usage:\n" " sysmon <format_string>\n\n" " sysmon is a terminal app that outputs various system\n" " information on a single line to standard output. sysmon\n" " exits after the line is printed.\n\n" " format_string is a string of characters that represents how\n" " the monitors will be displayed. Each monitor is represented\n" " with a unique character, which are listed below:\n\n" " c - cpu activity monitor\n" " m - used memory monitor\n" " i - io activity monitor\n" " d - date monitor\n\n" " All other characters that appear in format_string are\n" " printed as is.\n\n" "Example:\n" " sysmon \"c | m | i | d\"" ); } // char mon_format[] = "c | m | i | d"; char *mon_format = argv[1]; int mon_format_size = strlen( mon_format ); // pass 1, determine how many separators and monitors in mon_format int i; int monitor_count = 0; for( i = 0; i < mon_format_size; i++ ) { switch( mon_format[i] ) { case 'c': case 'm': case 'i': case 'd': monitor_count++; } } int separator_count = mon_format_size - monitor_count; // allocate space for separators and monitors arrays monitor_t *monitors = malloc( sizeof( monitor_t ) * monitor_count ); int *monitors_order = malloc( sizeof( int ) * monitor_count ); char *separators = malloc( sizeof( char ) * separator_count ); int *separators_order = malloc( sizeof( int ) * separator_count ); // pass 2, populate separators and monitors arrays int monitors_index = 0; int separators_index = 0; for( i = 0; i < mon_format_size; i++ ) { switch( mon_format[i] ) { case 'c': monitors[monitors_index] = cpu_mon; monitors_order[monitors_index] = i; monitors_index++; break; case 'm': monitors[monitors_index] = mem_mon; monitors_order[monitors_index] = i; monitors_index++; break; case 'i': monitors[monitors_index] = io_mon; monitors_order[monitors_index] = i; monitors_index++; break; case 'd': monitors[monitors_index] = date_mon; monitors_order[monitors_index] = i; monitors_index++; break; default: separators[separators_index] = mon_format[i]; separators_order[separators_index] = i; separators_index++; break; } } multithread_init( monitors, monitors_order, monitor_count, separators, separators_order, separator_count ); free( monitors ); free( monitors_order ); free( separators ); free( separators_order ); return 0; }
void tirpc_criticalsection_init(void) { multithread_init(); }