조회 수 7469 추천 수 0 댓글 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
번호 분류 제목 글쓴이 날짜 조회 수
841 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16387
840 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21261
839 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16485
838 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 11377
837 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 739
836 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
835 Develop 참고하고 지울 자료.. 집에서 바야지.. ㅋㅋ file hooni 2013.04.23 12126
834 Develop 정리할 자료. file hooni 2015.07.02 679
833 Develop 자주 쓰는 Docker 명령어 alias hooni 2020.01.10 269580
832 Develop 이어서 작업할 내용~ secret hooni 2013.11.21 0
831 Develop 웹페이지 성능 테스트 툴 설명 hooni 2013.04.23 27447
830 Develop 알고리즘 성능분석 file hooni 2014.06.24 2968
829 Develop 알고리즘 성능 분석 기준 hooni 2014.06.24 2788
828 Develop 아이 훌레시 작업중 ㅋㅋ secret hooni 2013.08.09 0
827 Develop 서기의 PHP 동영상 강의(싱싱해) hooni 2013.05.15 30982
826 Develop 사이버보안실무 수업 메모 secret hooni 2017.03.23 0
Board Pagination Prev 1 2 3 4 5 ... 53 Next
/ 53