본문 바로가기
Computer Science/UNIX & Linux

[UNIX/Linux] ep5) 시스템 정보

by 클레어몬트 2024. 10. 10.

ㅁ시스템 정보 검색: 기본 환경과 관련된 구조체나 상수를 사용해 정보를 검색
하드웨어와 운영체제의 종류 정보, 메모리 페이지의 크기나 최대 패스워드 길이와 같은 시스템 환경 설정 정보 등
 
[시스템 정보 검색 함수]
• uname() 함수: 설치된 운영 체제 정보와 같은 시스템 기본 정보를 검색할 수 있음
• sysconf() 함수: 시스템 자원 정보를 검색할 수 있음 (conf: configuration)
• fpathconf() 함수와 pathconf() 함수: 파일과 디렉터리 자원 정보를 검색할 수 있음

 
 
uname 명령: 운영체제 기본 정보 검색
• 시스템에 설치된 운영체제의 이름과 버전, 호스트명, 하드웨어 종류 등을 검색하려면 uname 명령을 사용
• uname 명령에 -a 옵션을 지정하면 현재 시스템에 설치되어 있는 운영체제 정보가 출력

 
 
ㅇ int uname(struct utsname* buf): 운영체제 정보 검색
buf : utsname 구조체 주소
운영체제 정보를 검색해 utsname 구조체에 저장한다
 
utsname 구조체는 sys/utsname.h 파일에 정의되어 있고 man –s 2 uname으로 확인할 수 있다

struct utsname {
    char sysname[];
    char nodename[];
    char release[];
    char version[];
    char machine[];
};

 
utsname 구조체의 각 항목은 문자형 배열이며, 각 값은 널 종료 문자열로 저장

#include <stdio.h>
#include <stdlib.h>
#include <sys/utsname.h>

int main() {
    struct utsname uts; // utsname 구조체 변수를 선언

    if (uname(&uts) == -1) { // 성공하면 utsname 구조체 변수인 uts에 시스템 정보가 저장
        perror("uname");
        exit(1);
    }

    printf("OSname : %s\n", uts.sysname);
    printf("Nodename : %s\n", uts.nodename);
    printf("Release : %s\n", uts.release);
    printf("Version : %s\n", uts.version);
    printf("Machine : %s\n", uts.machine);
    
    return 0;
}

 
 
ㅇ long sysconf(int name): 시스템 자원 정보 검색
- name : 검색할 정보를 나타내는 상수
검색하려는 시스템 정보를 나타내는 상수를 인자로 받고 현재 설정되어 있는 시스템 자원값 또는 옵션값을 리턴
실패하면 –1을 반환
 
sysconf() 함수의 인자로 지정할 수 있는 상수는 sys/unistd.h 파일에 정의

 

#include <stdio.h>
#include <unistd.h>

int main() {
    // 검색하고 싶은 명령을 sysconf() 함수의 인자로 지정
    printf("Arg Max : %ld\n", sysconf(_SC_ARG_MAX));
    printf("Clock Tick : %ld\n", sysconf(_SC_CLK_TCK));
    printf("Max Open File : %ld\n", sysconf(_SC_OPEN_MAX));
    printf("Max Login Name Length : %ld\n", sysconf(_SC_LOGIN_NAME_MAX));

    return 0;
}

인자의 최대 길이는 2097152바이트, 클릭은 초당 100번, 열 수 있는 최대 파일 개수는 1024개, 로그인명은 최대 256바이트

 
 
(파일과 디렉터리 자원 검색)
ㅇ long fpathconf(int fd, int name)

- fd : 파일 기술자

- name : 검색할 정보를 지정하는 상수

열린 파일의 파일 기술자(fd)를 인자로 받아 이 파일과 관련된 자원값이나 옵션값 정보를 검색

name에는 검색할 정보를 나타내는 상수를 지정

성공하면 결과를 정수로 반환, 실패하면 –1을 리턴


ㅇ long pathconf(const char* path, int name)
- path : 파일이나 디렉터리 경로
- name : 검색할 정보를 지정하는 상수
path에 지정한 파일이나 디렉터리와 관련해 설정된 자원값이나 옵션값을 반환
name에는 검색할 정보를 나타내는 상수를 지정

성공하면 결과를 정수로 반환, 실패하면 –1을 리턴

#include <stdio.h>
#include <unistd.h>

int main() {
    // 현재 디렉터리(.)의 최대 링크 수(_PC_LINK_MAX)와 최대 파일명 길이(_PC_NAME_MAX), 
    // 최대 경로 길이(_PC_PATH_MAX)를 검색해 리턴값을 출력
    printf("Link Max : %ld\n", pathconf(".", _PC_LINK_MAX));
    printf("Name Max : %ld\n", pathconf(".", _PC_NAME_MAX));
    printf("Path Max : %ld\n", pathconf(".", _PC_PATH_MAX));

    return 0;
}

링크는 최대 65000개, 파일명은 255바이트, 경로명은 4096바이트까지 사용 가능

 
 
 

 


 

 
참고 및 출처: 시스템 프로그래밍 리눅스&유닉스(이종원)