Zigged 시리즈: 환경 변수 접근
Source: Dev.to

블로그 03
환경 변수 접근하기
환경 변수는 운영 체제가 프로세스를 시작하기 직전에 전달하는 키‑값 쌍입니다. 주로 런타임 시 프로세스의 설정에 사용됩니다. C/C++에서는 환경 변수를 main 함수의 인자로 전달받습니다. Zig에서는 main 함수에 전달되는 init 객체를 통해 환경 변수에 접근할 수 있습니다. 어떻게 동작하는지 살펴보겠습니다.
프로그램 – Zig를 사용해 상속된 모든 환경 변수를 출력하기
모든 환경 변수를 출력하려면 환경 변수 이터레이터를 활용합니다.
// environment_vars1.zig
const std = @import("std");
pub fn main(init: std.process.Init) !void {
var env_vars_iterator = init.environ_map.iterator();
// setup stdout writer
var buffer: [1024]u8 = undefined;
var file_writer = std.Io.File.Writer.init(.stdout(), init.io, &buffer);
var stdout_writer = &file_writer.interface;
while (env_vars_iterator.next()) |env_var| {
try stdout_writer.print("{s} \n {s}\n\n", .{ env_var.key_ptr.*, env_var.value_ptr.* });
}
try stdout_writer.flush();
}
Enter fullscreen mode
Exit fullscreen mode
프로그램은 zig run environment_vars1.zig 로 실행할 수 있습니다. 실행하면 모든 환경 변수가 콘솔에 출력됩니다. 실행 파일을 만들려면 zig build-exe -O ReleaseSafe environment_vars1.zig 를 사용하세요.
프로그램 – 사용자가 선택한 환경 변수 값을 Zig로 출력하기
이번 예제에서는 stdin 으로부터 입력을 받을 수 있는 Reader 를 설정합니다. 먼저 앞서 사용한 이터레이터로 모든 환경 변수 이름을 출력하고, 그 뒤에 사용자가 입력한 이름에 해당하는 변수 값을 get 함수로 가져와 출력합니다. 존재하지 않는 변수명을 입력하면 InvalidEnvVariableEntered 오류를 반환합니다.
// environment_vars2.zig
const std = @import("std");
pub fn main(init: std.process.Init) !void {
// setting up stdout writer
var stdout_buffer: [1024]u8 = undefined;
var file_writer: std.Io.File.Writer = .init(.stdout(), init.io, &stdout_buffer);
var stdout_writer = &file_writer.interface;
// setting up stdin reader
var stdin_buffer: [1024]u8 = undefined;
var file_reader: std.Io.File.Reader = .init(.stdin(), init.io, &stdin_buffer);
var stdin_reader = &file_reader.interface;
try stdout_writer.print("Printing all environment variable names...\n", .{});
var env_vars_iterator = init.environ_map.iterator();
while (env_vars_iterator.next()) |env_var| {
try stdout_writer.print(" {s}\n", .{env_var.key_ptr.*});
}
// fetch the name of env variable whose value we need to display
try stdout_writer.print("Enter the name of an environment variable to see its value :", .{});
try stdout_writer.flush();
const userinput = try stdin_reader.takeDelimiterExclusive('\n');
const userinput_trimmed = std.mem.trimEnd(u8, userinput[0..userinput.len], "\r");
const env_var_value = init.environ_map.get(userinput_trimmed);
if (env_var_value == null) {
try stdout_writer.flush();
return error.InvalidEnvVariableEntered;
}
try stdout_writer.print("{s} => {s}\n", .{ userinput_trimmed, env_var_value.? });
try stdout_writer.flush();
}
Enter fullscreen mode
Exit fullscreen mode
프로그램은 zig run environment_vars2.zig 로 실행할 수 있습니다. 실행 파일을 만들려면 zig build-exe -O ReleaseSafe environment_vars2.zig 를 사용하세요.
읽어주셔서 감사합니다. 계속됩니다.
