17aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley/* who.c - display who is on the system 25232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * 35232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * Copyright 2012 ProFUSION Embedded Systems 45232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * 55232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * by Luis Felipe Strano Moraes <lfelipe@profusion.mobi> 65232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes * 7f91b7c89bc852868692b9518185421ebb52d67b3Rob Landley * See http://opengroup.org/onlinepubs/9699919799/utilities/who.html 8da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley * 9da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley * Posix says to support many options (-abdHlmpqrstTu) but this 10da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley * isn't aimed at minicomputers with modem pools. 115232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 121dd3704c5ffea926f61a96bb7de7d9dbee52fa44Paul BarkerUSE_WHO(NEWTOY(who, "a", TOYFLAG_USR|TOYFLAG_BIN)) 135232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 145232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraesconfig WHO 157aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley bool "who" 16da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley default y 1746ddf0e34b03f7711a9c80f7a70dc8cbf732f782Isaac Dunham depends on TOYBOX_UTMPX 187aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley help 197aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley usage: who 205232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 217aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley Print logged user information on system 225232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes*/ 235232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 24da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley#define FOR_who 255232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes#include "toys.h" 265232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 275232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraesvoid who_main(void) 285232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes{ 297aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley struct utmpx *entry; 305232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 317aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley setutxent(); 320352f4257da11908b211d704a9ef38e0055711e5Luis Felipe Strano Moraes 337aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley while ((entry = getutxent())) { 34da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley if ((toys.optflags & FLAG_a) || entry->ut_type == USER_PROCESS) { 357aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time_t time; 367aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley int time_size; 37da7fc1c863c15d9e5fe67185aa3ea47344d1c4ddRob Landley char *times; 380352f4257da11908b211d704a9ef38e0055711e5Luis Felipe Strano Moraes 397aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time = entry->ut_tv.tv_sec; 407aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley times = ctime(&time); 417aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time_size = strlen(times) - 2; 427aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley printf("%s\t%s\t%*.*s\t(%s)\n", entry->ut_user, entry->ut_line, 437aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley time_size, time_size, ctime(&time), entry->ut_host); 445232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes } 457aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley } 465232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes 477aa651a6a4496d848f86de9b1e6b3a003256a01fRob Landley endutxent(); 485232ac079353fb3779e480b74e87c714af6ee707Luis Felipe Strano Moraes} 49