Linux/Unix system information

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

getting system info

#include <sys/utsname.h>

int uname(struct utsname* buf);
  • return
    • 0 : success
    • -1 : error
#include <sys/sysinfo.h>

int sysinfo(struct sysinfo* info);
  • return
    • 0 : success
    • -1 : error

getting resource info

#include <unistd.h>

long sysconf(int name);
  • name : 검색할 정보를 지징하는 상수(man page 참고)
  • return : 요청한 정보의 값, -1 : error

file and directory resource info

#include <unistd.h>

long fpathconf(int fd, int name);
long pathconf(const char* path, int name);
  • return : 읽어온 정보 값, -1 : error

User ID & Login name

  • UID : 사용자에게 부여된 ID 번호
  • Login name : 문자 형태의 사용자 이름, UID에 mapping 됨

User ID & Login name - Process 입장

  • Real user ID : 최초에 process를 실행한 user의 UID
  • Effective user ID(EUID) : 현재 process가 행사하는 UID, process가 가진 권한판단에 사용됨
  • Saved user ID : process의 최초의 effective user ID, 원래의 EUID로 돌아가기 위해 사용

Effective User ID

  • 실행 파일의 setuid bit = 1인 경우,  해당파일 소유자의 UID가 effective UID가 됨

getting / setting user ID

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

uid_t getuid(void);
uid_t geteuid(void);
int seteuid(uid_t uid);
  • process의 euid 설정
  • uid : euid로 설정하려는 uid, 일반 사용자는 real uid 또는 saved uid로 설정만 가능

read the passwd file

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

struct passwd* getpwnam(const char* name);
struct passwd* getpwuid(uid_t uid);
  • passwd 파일에서 사용자 정보를 읽어 옴
  • return : 해당 사용자에 대한 passwd structure가 저장된 pointer, -1 : NULL

read the shadow file

#include <shadow.h>

struct spwd* getspnam(const char* name);
strcut spwd* getspent(void);
void setspent(void);
void endspent(void);

read the group file

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

struct group* getgrnam(const char* name);
struct group* getgrgid(gid_t gid);
struct group* getgrent(void);
void setgrent(void);
void endgrent(void);

Time in Unix / Linux

  • 1970년 1월 1일 0시 0분 0초(UTC) 기준
  • 현재까지 경과한 시간을 초 단위로 저장
  • 이를 기준으로 시간 정보 관리

getting time

#include <sys/time.h>

time_t time(time_t* tloc);
  • 기준시간으로부터 경과한 초를 얻어 옴
  • tloc : 얻어온 초를 저장할 주소
  • return : 얻어온 초, -1 : error

getting / setting time

#include <sys/time.h>

int gettimeofday(struct timeval* tv, struct timezone* tz);
int settimeofday(const struct timeval* tv, const struct timezone* tz);
  • 기준시간으로부터 경과한 시간을 micro-second 단위로 읽어 옴
  • tv : 읽어온 시간을 저장할 timeval 구조체의 주소
  • tz : NULL 사용, 세부 내용은 man page 확인
  • return
    • 0 : success
    • -1 : fail

setting time zone info

#include <time.h>

void tzset(void);
  • 현재 지역의 시간대로 시간대를 설정함
  • 전역 변수에 정보가 설정됨(header 파일에 정의되어 있음)
    • extern char* tzname[2];
    • extern long timezone;
    • extern int daylight;

tm structure

  • 초단위로 시간 정보를 사람이 이해하기 편한 형태로 변환하는 함수 제공

seconds <-> tm struct

#include <time.h>

struct tm* gmtime(const time_t* timep);
struct tm* localtime(const time_t* timep);
time_t mktime(struct tm* tm);

printing time

#include <time.h>

char* ctime(const time_t* timep);
char* asctime(const struct tm* tm);
size_t strftime(char* s, size_t max, const char* format, const struct tm* tm);
  • 출력 형식을 임의 지정 가능
  • 형식에 맞추어 변환된 시간을 문장(s)으로 변환

'💻 Computer Science > System' 카테고리의 다른 글

[System] 프로세스 관리  (1) 2024.01.25
[System] 프로세스  (0) 2024.01.25
[System] Files in Unix/Linux  (1) 2024.01.24
[System] High-Level File I/O  (1) 2024.01.24
[System] Low-Level File I/O  (1) 2024.01.23