Contents

조회 수 7469 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
#include <sys/types.h>
#include <sys/file.h>
#include <sys/time.h>
#include <utmp.h>
#include <stdio.h>

int main(int argc, char *argv[]){
        register char *p;
        struct utmp usr;
        FILE *ufp;
        time_t time();

        ufp = fopen(_PATH_UTMP, "r");
        // 사용자 정보를 담고 있는 파일(변수)을 읽어옵니다.

        while( fread((char *)&usr, sizeof(usr), 1, ufp) == 1){
                if(*usr.ut_host){
                // 사용자 정보가 있을경우
                // 루트와 그밖의 시스템 계정 제외
                        printf("%st%st%.12s", usr.ut_name, usr.ut_line, ctime(&usr.ut_time)+4);
                        if(*usr.ut_host) printf("t(%s)n", usr.ut_host);
                        // 상용자 정보와 호스트를 출력합니다.
                }
        }
        return 0;


질문 >>
"who" 와 유사하게 동작하는 프로그램으로써 현재 작업중인 사용자들에 대한 정보를 출력해 주는 프로그램을 작성 인데요...


- 현재 login 중인 사용자들에 대한 정보는 지정된 시스템 파일에
  특정 구조체(struct) 형태의 레코드 단위로 저장되어 관리되고 
  있는데, 구체적인 사항들은 "/usr/include/utmp.h" 파일에 정의
  되어 있는 내용을 참조하여 이용할 것
  *** 자료구조로는 아래와 같은 struct utmp 구조체를 이용하고
  있는데, "utmp.h" 파일에 정의되어 있으며, 이 중에서 
  아래에 제시한 네가지 정보만 이용하면 됨.
  struct utmp {
  char ut_user[8]; /* user login name */ 
  char ut_id[4]; 
  char ut_line[12]; /* device name (console, ..) */
  short ut_pid; 
  short ut_type; /* type of entry */
  struct exit_status ut_exit; 
  time_t ut_time; /* time entry was made */
  /* type "time_t" means "long int" */
  };
  << 위의 struct utmp 내의 자료 구조 중에서 이용할 정보 >>
  . ut_user: 사용자의 login 이름
  . ut_line: 사용자가 login한 단말기 장치
  . ut_time: 사용자가 login한 시간 정보
  . ut_type: 엔트리의 타입에 대한 정보를 저장하고 있는데, 
  모든 type을 모두 출력하지 말고 "utmp.h" 헤드 파일에서 
  정의하고 있는 "USER_PROCESS"로 분류된 일반 사용자 
  프로세스에 해당하는 type만을 대상으로 고려할 것
  (SUN Solaris에서는 "#define USER_PROCESS 7"로 정의됨)
  *** 이러한 각 entry 정보를 하나의 레코드 형태로 지정된 파일에 기록해
  두고 있으므로, 앞에서 배운 레코드 단위 입출력을 위한 fread() 함수를
  이용하면 되고, utmp 관련 정보를 저장하고 있는 해당 파일의 이름은
  "utmp.h"에서 "UTMP_FILE"이란 이름으로 정의하고 있으므로 참조할 것 
  SUN solaris에서는 원래 파일 "/var/adm/utmp"과 이 파일을 link시킨 
  "/etc/utmp" 파일로 존재하고 있다.
  - 시간 정보의 출력을 위해서는 utmp 파일의 각 레코드에 저장된 "ut_time"
  정보를 인수로 하여 앞에서 배운 localtime() 함수를 이용하면 된다.
  그리고 localtime() 함수 호출의 결과 return 받게 되는 "struct tm"에
  관한 정보는 "/usr/include/time.h" 헤드 파일에 정의되어 있다.
  struct tm { /* see ctime(3) */
  int tm_sec;
  int tm_min; /* minute */
  int tm_hour; /* hour */
  int tm_mday; /* day of the month */
  int tm_mon; /* month of the year */
  int tm_year;
  int tm_wday; /* day of the week */
  int tm_yday;
  int tm_isdst;
  };

  << 위의 struct tm 내의 자료 구조 중에서 이용할 정보 >>
  . tm_min: 분에 대한 정보(X 분)
  . tm_hour: 시에 대한 정보(X 시)
  . tm_mday: 해당 달 내에서의 일수(X 일)
  . tm_month: 월에 대한 정보(X 월), 월을 아라비아 숫자가 아니라 "Jan", "May" 등의 스트링으로 출력해 주기 위한 전처리 필요. 


?

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
921 Develop [java] netty (비동기 이벤트 방식 네트워크 프레임워크) 사용법 #1 (server) 1 hooni 2015.01.02 2214
920 System/OS [svn] 하나의 SVN에서 멀티 저장소 (One svnserve, multiple repositories) hooni 2015.01.02 1549
919 Develop ZBar 라이브러리를 이용한 바코드 스캔 앱 개발하기 file hooni 2015.01.01 1629
918 System/OS iptime 공유기 해킹 기술문서 4 file hooni 2015.01.01 1941
917 System/OS [svn] Can't convert string from native encoding to 'UTF-8' 메시지가 나오는 경우 hooni 2014.12.18 993
916 System/OS [svn] SVN trunk 변경사항 되돌리기 (SVN Rollback) hooni 2014.11.27 1564
915 Develop [ios] 비동기 블럭 코드 예제 hooni 2014.11.21 825
914 Develop [ios] 스크린 캡쳐 (전원버튼 + 홈버튼) 호출 알아내기 hooni 2014.11.19 1556
913 Develop [android] 가속도 센서를 이용한 흔듦(Shake) 감지 file hooni 2014.11.04 1898
912 Develop [web] 더 빠른 웹을 위한 프로토콜, 'HTTP/2' file hooni 2014.10.20 1641
911 Develop GPL, AGPL, MPL,.. 한눈에 보는 오픈소스SW 라이선스 file hooni 2014.10.14 1146
910 Develop [js] 좋은 강연자료 & UI 자료 hooni 2014.10.06 910
Board Pagination Prev 1 ... 17 18 19 20 21 22 23 24 25 26 ... 98 Next
/ 98