C에서 시스템 호스트 이름 찾기

Jinku Hu 2023년10월12일
  1. gethostname함수를 사용하여 C에서 시스템 호스트 이름 찾기
  2. uname함수를 사용하여 C에서 시스템 호스트 이름 찾기
C에서 시스템 호스트 이름 찾기

이 기사에서는 C에서 시스템 호스트 이름을 찾는 방법에 대해 설명합니다.

gethostname함수를 사용하여 C에서 시스템 호스트 이름 찾기

gethostname함수는 POSIX 사양의 일부이며 시스템 호스트 이름에 액세스하는 데 사용됩니다. 이 함수는 두 개의 인수를 취합니다. 검색된 호스트 이름이 저장 될 버퍼를 가리키는char *와 버퍼의 길이를 나타내는 바이트 수입니다. 이 함수는 성공시 0을 반환하고 오류시 -1을 반환합니다. POSIX 시스템은 호스트 이름 길이에 대해 정의 된 최대 바이트 수를 가질 가능성이 있으므로 사용자는 검색된 값을 저장할만큼 충분히 큰 버퍼를 할당해야합니다.

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

enum { MAX_SIZE = 256 };

int main(void) {
  int ret;
  char hostname[MAX_SIZE];

  ret = gethostname(&hostname[0], MAX_SIZE);
  if (ret == -1) {
    perror("gethostname");
    exit(EXIT_FAILURE);
  }
  printf("Hostname:    %s\n", hostname);

  exit(EXIT_SUCCESS);
}

출력:

Hostname:    lenovo-pc

이전 예제는gethostname함수에 대한 기본 호출을 보여 주지만 오류보고 루틴을 항상 구현하여 오류 방지 코드와 정보 로깅 메시지를 보장해야합니다. gethostnameerrno값을 설정하므로switch문에서이를 평가하고 해당 메시지를stderr스트림에 인쇄 할 수 있습니다.

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

enum { MAX_SIZE = 256 };

int main(void) {
  int ret;
  char hostname[MAX_SIZE];

  errno = 0;
  ret = gethostname(&hostname[0], MAX_SIZE);
  if (ret == -1) {
    switch (errno) {
      case EFAULT:
        fprintf(stderr, "'name' argument is an invalid address");
        break;
      case EINVAL:
        fprintf(stderr, "'len' argument is negative");
        break;
      default:
        perror("gethostname");
    }
    exit(EXIT_FAILURE);
  }
  printf("Hostname:    %s\n", hostname);

  exit(EXIT_SUCCESS);
}

출력:

Hostname:    lenovo-pc

uname함수를 사용하여 C에서 시스템 호스트 이름 찾기

또는uname함수 호출을 사용하여 시스템 호스트 이름을 찾을 수 있습니다. uname은 일반적으로 운영 체제 이름, 운영 체제 릴리스 날짜, 버전, 하드웨어 ID 및 호스트 이름과 같은 시스템에 대한 여러 데이터 포인트를 검색 할 수 있습니다. 그러나uname<sys/utsname.h>헤더 파일에 정의 된utsntheame구조에 위 정보를 저장합니다. 이 함수는utsname구조에 대한 포인터를 가져와 성공적인 호출에 대해 0 값을 리턴합니다. uname은 실패시errno도 설정하며utsname구조에 대한 전달 된 포인터가 유효하지 않은 경우EFAULT값이 표시로 정의됩니다.

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

enum { MAX_SIZE = 256 };

int main(void) {
  struct utsname uts;

  if (uname(&uts) == -1) perror("uname");

  printf("Node name:   %s\n", uts.nodename);
  printf("System name: %s\n", uts.sysname);
  printf("Release:     %s\n", uts.release);
  printf("Version:     %s\n", uts.version);
  printf("Machine:     %s\n", uts.machine);

  exit(EXIT_SUCCESS);
}

출력:

Hostname:    lenovo-pc
작가: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

관련 문장 - C Networking