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
번호 분류 제목 글쓴이 날짜 조회 수
1173 System/OS 해커스랩 깨기.. 후후.. ㅋㅋ file hooni 2013.04.23 18410
1172 Etc 플라스터(Plaster) 수업 내용 secret hooni 2016.05.24 0
1171 Develop 프로그램 문서 관리 (Doxygen) hooni 2013.04.23 16384
1170 Develop 프로그래밍에서 foo, bar 함수의 유래 file hooni 2013.06.25 21243
1169 Develop 프로그래밍 소스 관련 사이트.. hooni 2013.04.23 16484
1168 Develop 페이팔에서 돈 찾기 (Paypal withdraw) file hooni 2014.02.20 10954
1167 Etc 티스토리 테이블 html,css 구문 hooni 2013.11.03 15941
1166 System/OS 콘솔에서 패스워드 걸린 zip 압축하는 명령 hooni 2018.03.02 927
1165 System/OS 컴파일러 수업 자료(교재 : 컴파일러 입문) file hooni 2003.04.23 21965
1164 Develop 캘리포니아 운전면허 족보 file hooni 2017.06.12 724
1163 Etc 캘리포니아 운전면허 문제 file hooni 2017.07.22 961
1162 Develop 최근 논문 자료 (2011/01/03, 만현형한테 보낸거..) secret hooni 2013.04.23 10366
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 98 Next
/ 98