운영체제에 대한 기본 정보 검색
- uname -a
- SunOS hanbit 5.10 Generic_118855-33 i86pc i386 i86pc
- 운영체제명, 호스트명, 릴리즈 레벨, 버전 번호, 하드웨어 형식명, CPU명, 플랫폼명
#include <sys/utsname.h>
int uname(struct utsname *name);
main()
{
struct utsname system_info;
uname(&system_info);
printf("OS name : %s\n",system_info.sysname);
printf("Node name : %s\n",system_info.nodename);
printf("Release : %s\n", system_info.release);
printf("Version : %s\n", system_info.version);
printf("Machine : %s\n", system_info.machine);
}
파일, 디렉토리 관련 자원 검색 - fpathconf, pathconf
#include <unistd.h>
long pathconf(const char *path, int name);
long fpathconf(int fildes, int name); //특정 파일 검색
int main(){
printf("Link max : %ld\n",pathconf(".", _PC_LINK_MAX));
}
- name 상수
- _PC_LINK_MAX(1) : 디렉토리/파일 하나에 가능한 최대 링크 수
- _PC_NAME_MAX(4) : 파일명 최대 길이를 바이트 크기로 나타냄
- _PC_PATH_MAX(5) : 경로명 최대 길이를 바이트 크기로 나타냄
사용자 정보 검색
- 사용자 관련 정보 : 각 사용자에 관한 정보, 그룹에 관한 정보, 로그인 기록 정보
- /etc/passwd (패스워드 파일), /etc/shadow (섀도우 파일), /etc/group (그룹 파일), /var/adm/utmpx (로그인 기록 파일)
로그인명 검색 - getlogin, cusreid UID 검색 - getuid, geteuid
#include <unistd.h>
#include <sys/types.h>
char *getlogin(void);
char *cuserid(char *s);
uid_t getuid(void); //프로세스 사용자 식별 번호 (유효 사용자)
uid_t geteuid(void); //프로세스 생성자 식별 번호 (진짜 사용자)
int main(){
uid_t uid, euid;
char *name, *cname;
uid = getuid();
euid = geteuid();
name = getLogin();
cname = cuserid(NULL);
}
패스워드 파일
- /etc/passwd 파일 구조
- root:x:0:0:Super-User:/:/usr/bin/ksh
- 로그인 ID, pw(암호화됨), UID, GID, 설명, 홈 디렉토리, 로그인 쉘
그룹 정보 검색 - getgid, getegid
#include <sys/types.h>
#include <unistd.h>
gid_t getgid(void);
gid_t getegid(void);
int main(){
gid_t gid, egid;
gid = getgid();
egid = getegid();
}
- etc/group 파일 구조
- root::0: (비번, id, 사용자 이름 - 나올수도 안나올수도 O)
- other::1:root
- bin::2:root,daemon
- sys::3:root,bin,adm
- adm::4:root,daemon
- uucp::5:root
- ...
- struct group
- char *gr_name;
- char *gr_passwd;
- gid_t gr_gid;
- char **gr_mem;
★시간 관리 함수
1970년 1월 1일 0시 0분 0초 (UTC)를 기준으로 현재까지 경과한 시간을 초 단위로 저장
time
- 초 단위로 현재 시간 정보 얻기
#include <sys/types.h>
#include <time.h>
time_t time(time_t *tloc);
int main(){
time_t tt;
time(&tt);
printf("%ime: %d",(int)tt);
}
gettimeofday
- 마이크로 초 단위로 시간 정보 얻기
- struct timeval
- time_t tv_sec (초)
- suseconds_t tv_usec (마이크로 초)
#include <sys/time.h>
int gettiemofday(struct timeval *tp, void *tzp);
int settimeofday(struct timeval *pt, void *tzp);
int main(){
struct timeval tv;
gettimeofday(&tv, NULL);
prinf("Time: %d",(int)tv.tv_sec);
}
시간 형태 변환 - gmtime, localtime, mktime
- 초를 인자로 받아 tm 구조 리턴, gmtime은 UTC, localtime은 지역시간대 기준
- mktime: 초 단위 시간으로 역산
- struct tm
- int tm_sec, tm_min, tm_hour, tm_mday, tm_mon, tm_year, tm_wday, tm_yday, tm_isdst
- 현재 년도 - 1900 해준 값이 나옴, 0부터 시작해서 month가 0이면 1월
#include <time.h>
struct tm *localtime(const time_t *clock);
struct tm *gmtime(const time_t *clock);
int main(){
struct tm *tm;
time_t t;
time(&t);
tm = gettime(&t);
printf("GMTTIME=Y %d\n", tm->tm_year);
tm = localtime(&t);
printf("LOCALTIME = Y: %d\n",tm->tm_year);
}
형식 지정 시간 출력 - ctime
- 더 정렬된 형태로 볼 수 있음
#include <time.h>
char *ctime(const time_t *clock);
int main(){
time_t t;
time(&t);
printf("Time(data) : %s", ctime(&t));
}