Linux/Unix system information
- 시스템에 설치된 OS에 관한 정보
- 호스트명 정보(컴퓨터 이름)
- 하드웨어 종류에 관한 정보
- 하드웨어에 따라 사용할 수 있는 자원의 최댓값
- 최대 프로세스 개수
- 프로세스 당 열 수 있는 최대 파일 개수
- 메모리 페이지 크기 등
getting system info
#include <sys/utsname.h>
int uname(struct utsname* buf);
#include <sys/sysinfo.h>
int sysinfo(struct sysinfo* info);
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
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)으로 변환