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
번호 분류 제목 글쓴이 날짜 조회 수
993 System/OS 무료로 HTTPS 적용하기 (Let's Encrypt) file hooni 2017.10.28 1403
992 Develop What is difference between Get, Post, Put and Delete? hooni 2018.02.28 1403
991 Etc 아이폰의 터치스크린 정확도 file hooni 2015.04.01 1415
990 Etc IT감사 기법 시험 file hooni 2017.06.14 1418
989 System/OS [linux] wget 명령 사용 예제 hooni 2020.05.26 1436
988 System/OS [mac] Mac OS에서 재생되는 사운드를 녹음하는 방법 file hooni 2016.10.03 1444
987 System/OS OpenSSL로 ROOT CA 생성 및 SSL 인증서 발급하기 hooni 2017.10.28 1458
986 Database [mysql] MacOS에 MySQL 설치, 설정, 암호 재설정 file hooni 2017.12.15 1466
985 Develop [android] 레이아웃 사이즈 변경 (동적; programmatically) hooni 2016.11.07 1482
984 System/OS [mac] OS X 요세미티 사용자가 많이 겪는 버그와 몇몇 불편사항 file hooni 2015.01.04 1526
983 Develop [ios] Pod 특정 버전 설치하고 사용하기 hooni 2022.05.28 1528
982 Develop [ios] binary를 C코드로 변환 file hooni 2015.01.03 1529
Board Pagination Prev 1 ... 11 12 13 14 15 16 17 18 19 20 ... 98 Next
/ 98