Develop
2003.04.23 11:00
[c] 간단한 순위 루틴.. (질문에 대한 답변)
조회 수 7496 댓글 0
#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" 등의 스트링으로 출력해 주기 위한 전처리 필요.
번호 | 분류 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|---|
553 | Develop |
[c] C에서 MySQL DB 사용하기~
![]() |
hooni | 2003.04.23 | 7042 |
552 | Develop |
[c] openssl 샘플코드.. 어려움 ㅠㅠ
![]() |
hooni | 2013.04.23 | 7044 |
551 | Develop |
[c] 정사각배열의 서브 배열의 최대 값 구하기
![]() |
hooni | 2003.04.23 | 7047 |
550 | Develop | [js] 큐 형식으로 배열사용.. ㅋㅋ | hooni | 2013.04.23 | 7052 |
549 | Develop |
도메인 관련 솔루션 분석할 거.. ㅋㄷ
![]() |
hooni | 2013.04.23 | 7060 |
548 | Develop | [C++] 18일차 과제물, String 클래스 디자인 【 C++ 문제 】 | hooni | 2013.04.23 | 7064 |
547 | Develop | [c++] 소켓 프로그래밍 관련 링크.. (퍼올려고 올린거) | hooni | 2013.04.23 | 7064 |
546 | Develop |
[c] 단어 입력/수정 프로그램 소스
![]() |
hooni | 2003.04.23 | 7065 |
545 | Develop |
[c] 텍스트 파일(로그)을 정해진 라인 단위로 쪼개주는 코드
![]() |
hooni | 2013.04.23 | 7069 |
544 | Develop |
[js] 툴팁.. 좋은거.. (tooltip)
![]() |
hooni | 2013.04.23 | 7082 |
543 | Develop |
[c++] mfc 기반 멀티수납(wall)시스템 소스와 실행파일
![]() |
hooni | 2013.04.23 | 7084 |
542 | Develop |
[c] 내가 만든 암호화 프로그램.. 좋아^^
![]() |
hooni | 2013.04.23 | 7084 |