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
함수에 대한 기본 호출을 보여 주지만 오류보고 루틴을 항상 구현하여 오류 방지 코드와 정보 로깅 메시지를 보장해야합니다. gethostname
은errno
값을 설정하므로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
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