728x90
반응형
개요
이 글에서는 C 언어를 사용하여 환경변수를 확인하고 디렉토리를 생성하는 방법에 대해 설명한다. 특히 Windows와 Linux 같은 서로 다른 운영체제에서 이러한 작업을 수행하는 방법의 차이점과 크로스 플랫폼 코드 작성 방법에 초점을 맞춘다. 환경변수 접근을 위한 getenv() 함수와 디렉토리 생성을 위한 mkdir()(Linux) 및 CreateDirectoryA()(Windows) 함수의 사용법과 예제 코드를 통해 실제 구현 방법을 알아보자.
환경변수 확인
getenv(const char* name) - stdlib.h
- getenv() 함수는 name 이름을 가지는 환경변수에 저장된 값을 읽어온다.
- 환경변수는 "key=value" 형태로 저장되며, getenv()의 아규먼트로 들어가는 name 은 이 key 이름이 된다.
- 보통 환경변수는 프로그램의 환경설정을 위한 간단한 방법으로 널리 사용된다.
- 반환값 : 만약 일치하는 name 을 가지는 환경변수가 있다면 "값"을 되돌려주고 없다면 NULL 을 반환한다.
디렉토리 생성
Linux 계열
int mkdirconst char *path, mode_t mode);
- 헤더: sys/stat.h
- 인수
- char *path : 생성할 디렉토리 전제 이름
- mode_t mode : 접근 권한 지정
- 반환
- 0 : 생성 성공
- -1 : 생성 실패
Windows 계열
BOOL CreateDirectoryA(
LPCSTR lpPathName,
LPSECURITY_ATTRIBUTES lpSecurityAttributes
);
- 헤더 windows.h
- lpPathName : 생성할 디렉토리의 경로를 나타내는 문자열
- lpSecurityAttributes : 디렉토리의 보안 특성을 지정하는데 사용되는 포인터. 보안 특성을 변경할 필요가 없다면 NULL
- 반환
- 0 : 생성 성공
- 0이 아닌값 : 생성 실패
예제
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef _WIN32
#include <Windows.h>
#define MAXPGPATH MAX_PATH
#else
#include <unistd.h>
#include <sys/types.h>
#include <pwd.h>
#include <sys/stat.h>
#include <limits.h>
#define MAXPGPATH 1024
#endif
void get_test_path(char *out)
{
// Check if 'TEST_ENV' environment variable is set
const char *test_env = getenv("TEST_ENV");
if (test_env != NULL)
{
// If 'TEST_ENV' environment variable is set, use its value as the path
strncpy(out, test_env, MAXPGPATH - 1);
out[MAXPGPATH - 1] = '\\0';
}
else
{
// If 'TEST_ENV' is not set, make $HOME/test_dir/
#ifdef _WIN32
// Windows-specific code
char home_path[MAXPGPATH];
if (SUCCEEDED(SHGetFolderPathA(NULL, CSIDL_PROFILE, NULL, 0, home_path)))
{
snprintf(license_absolute_path, MAXPGPATH, "%s\\\\test_dir\\\\", home_path);
CreateDirectoryA(license_absolute_path, NULL);
}
#else
// Linux-specific code
const char *home_path = getenv("HOME");
if (home_path != NULL)
{
snprintf(out, MAXPGPATH, "%s/test_dir/", home_path);
mkdir(out, S_IRWXU);
}
#endif
}
}
int main(void)
{
char test_path[MAXPGPATH] = {'\\0',};
get_test_path(test_path);
printf("Test path: %s\\n", test_path);
return 0;
}
참고 문헌
728x90
반응형
'Programming > C' 카테고리의 다른 글
C언어로 인터넷 연결 상태 확인하기 (2) | 2025.03.29 |
---|---|
cJSON을 활용한 JSON 파싱 (2) | 2025.03.25 |
open() 과 fopen()의 차이점 (0) | 2025.03.20 |
popen 함수 (0) | 2025.03.19 |
C언어로 하는 TCP/IP 소켓 통신 (4) | 2025.03.18 |