Computer Science/유닉스프로그래밍

[유닉스 시스템 프로그래밍] Ch04. 시스템 정보

계속지나가기 2020. 10. 19. 21:16
반응형

(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)

Ch04. 시스템 정보

학습목표

  • 유닉스 시스템 정보를 검색하는 함수를 사용할 수 있다.
  • 사용자 관련 정보를 함수를 이용해 검색할 수 있다.
  • 시스템의 시간을 관리하는 함수를 사용할 수 있다

목차

  1. 유닉스 시스템 관련 정보
  2. 사용자 정보 검색
  3. 시간 관리 함수

01. 유닉스 시스템 관련 정보

  • 시스템에 설치된 OS에 관한 정보
  • 호스트명 정보
  • 하드웨어 종류에 관한 정보
  • 하드웨어에 따라 사용할 수 있는 자원의 최대 값
    : 최대 프로세스 개수, 프로세스당 열 수 있는 최대 파일 개수, 메모리 페이지 크기 등

OS 기본 정보 검색

  • 시스템에 설치된 OS에 대한 기본 정보 검색
    • 시스템은 인텔 PC, 솔라리스 10 운영체제 설치, 호스트 명은 hanbit

  • OS 정보 검색 함수 : uname( )
#include <sys/utsname.h>
int uname(struct utsname *name);

시스템 정보 검색과 설정

  • 시스템 정보 검색과 설정 : sysinfo()
    #include <sys/sysinfo.h> 
    int sysinfo(struct sysinfo *info); 
    

    -   sysinfo()는 전체적인 시스템 통계 정보를 가져오기 위해서 사용한다
    -   가져온 정보는 struct sysinfo에 저장됨

 

시스템 자원 정보 검색


: 하드웨어에 따라 사용할 수 있는 자원들의 최댓값 검색

-   시스템 자원 정보 검색 : sysconf( )

: 검색할 정보를 나타내는 상수를 사용해야 함, 상수 정보는 각 표준 테이블 참고

#include <unistd.h>
long sysconf(int name);


-   파일과 디렉토리 관련 자원 검색 : fpathconf( ), pathconf( )

#include <unistd.h>
long pathconf(const char *path, int name);
long fpathconf(int fildes, int name);

   -   경로나 파일기술자에 지정된 파일에 설정된 자원값이나 옵션값 리턴
    -   name 사용할 상수

 

02. 사용자 정보 검색

사용자 정보 검색


-   사용자 정보, 그룹정보, 로그인 기록 검색
: /etc/passwd, /etc/shadow, /etc/group, /var/adm/utmpx

1. 로그인 명 검색 : getlogin()

- /var/adm/utmpx 파일을 검색해 현재 프로세스를 실행한 사용자의 로그인명을 리턴

#include <unistd.h>
char *getlogin(void);

2. 로그인 명 검색 : cuserid()

- 현재 프로세스의 소유자 정보로 로그인명을 찾아 리턴

#include <stdio.h>

char *cuserid(char *s);



3. UID 검색

#include <sys/types.h>
#include <unistd.h>

uid_t getuid(void);
uid_t geteuid(void);

 

패스워드 파일  검색

-   UID로 passwd 파일 읽기 : getpwuid( )

#include <pwd.h>

struct passwd *getpwuid(uid_t uid);

-   이름으로 passwd 파일 읽기 : getpwnam( )

#include <pwd.h>

struct passwd *getpwnam(const char *name);

- passwd 구조체

struct passwd {
    char *pw_name;
    char *pw_passwd;
    uid_t pw_uid;
    gid_t pw_gid;
    char *pw_age;
    char *pw_comment;
    char *pw_gecos;
    char *pw_dir;
    char *pw_shell;
};

-   /etc/passwd 파일 순차적으로 읽기

#include <pwd.h>

struct passwd *getpwent(void);
void setpwent(void);
void endpwent(void);
struct passwd *fgetpwent(FILE *fp);

 

섀도우 파일  검색

- /etc/shadow 파일의 구조

- /etc/shadow 파일 읽기 : getspnam()

#include <shadow.h>

struct spwd *getspnam(const char *name);

- /etc/shadow 파일 순차적으로 읽기

#include <shadow.h>

struct spwd *getspent(void);
void setspent(void);
void endspent(void);
struct spwd *fgetspent(FILE *fp);

그룹 정보 검색

- 그룹 ID 검색하기 : getgid(), getegid()

#include <sys/types.h>
#include <unistd.h>

gid_t getgid(void);
gid_t getegid(void);

- /etc/group 파일 검색 : getgrnam(3), getgrgid(3)

#include <grp.h>

struct group *getgrnam(const char *name);
struct group *getgrgid(gid_t gid);

- /etc/group 파일 순차적으로 읽기

#include <grp.h>

struct group *getgrent(void);
void setgrent(void);
void endgrent(void);
struct group *fgetgrent(FILE *fp);

3. 시간 관리 함수

시간 관리 함수

  • 유닉스 시스템에서 시간 관리

    : UTC(1970/01/01 0시 0분 0초)를 기준으로 현재까지 경과한 시간을 초단위로 저장하고 이를 기준으로 시간 정보 관리

  • 초 단위로 현재 시간 정보 얻기 : time( )

#include <sys/types.h>
#include <time.h>

time_t time(time_t *tloc);
  • 마이크로 초 단위로 시간 정보 얻기 : gettimeofday( )
#include <sys/time.h>

int gettimeofday(struct timeval *tp, void *tzp);
int settimeofday(struct timeval *tp, void *tzp);

 

  • 시간대 정보 : tzset( )

    • 현재 지역의 시간대로 시간을 설정
#include <time.h>

void tzset(void);

시간의 형태 변환

  • 초 단위 시간 정보 분해 : gmtime( ), localtime( )
    • 초를 인자로 받아 tm구조 리턴, gmtimeUTC기준, localtime지역시간대 기준
#include <time.h>

struct tm *localtime(const time_t *clock);
struct tm *gmtime(const time_t *clock);

- tm 구조체

struct tm { 
    int tm_sec;
    int tm_min;
    int tm_hour;
    int tm_mday;
    int tm_mon;
    int tm_year;
    int tm_wday;
    int tm_yday;
    int tm_isdst;
};

 

  • 초 단위 시간으로 역산 : mktime( )
#include <time.h>

time_t mktime(struct tm *timeptr);

 

형식 지정 시간 출력

  • 초 단위 시간을 변환해 출력하기 : ctime( )
#include <time.h>

char *ctime(const time_t *clock);
  • tm 구조체 시간을 변환해 출력하기 : asctime( )
#include <time.h>

char *asctime(const struct tm *tm);

 

  • 출력 형식 기호 사용 : strftime( )
#include <time.h>

size_t strftime(char *restrict s, size_t maxsize,
const char *restrict format, const struct tm *restrict timeptr);

- 지정자 테이블 참고

반응형