/* ECP: FILEname=fig13_2.c */ /* 1*/ #include /* 2*/ #include /* 3*/ #include /* 4*/ #include /* 5*/ #include /* 6*/ #include /* 7*/ /* Return Number Of Seconds Terminal Has Been Idle */ /* 8*/ /* -1 Is Returned On Error */ /* 9*/ #define MaxLen 32 /*10*/ #define DevLen 6 /* strlen( "/dev/" ) + 1 */ /*11*/ int /*12*/ Idle( const char *Terminal ) /*13*/ { /*14*/ struct stat StatBuf; /*15*/ char TerminalName[ MaxLen ] = "/dev/"; /*16*/ time_t Now; /*17*/ strncat( TerminalName, Terminal, MaxLen - DevLen ); /*18*/ if( lstat( TerminalName, &StatBuf ) < 0 ) /*19*/ perror( TerminalName ); /*20*/ else /*21*/ if( !S_ISCHR( StatBuf.st_mode ) ) /*22*/ fprintf( stderr, "%s: Not a terminal\n", TerminalName ); /*23*/ else /*24*/ { /*25*/ time( &Now ); /*26*/ return ( int ) difftime( StatBuf.st_atime, Now ); /*27*/ } /*28*/ return -1; /* Error Indicator */ /*29*/ }