envz_add(3) - wariua/manpages-ko GitHub Wiki
envz_add, envz_entry, envz_get, envz_merge, envz_remove, envz_strip - ํ๊ฒฝ ๋ฌธ์์ด ์ง์
#include <envz.h>
error_t envz_add(char **envz, size_t *envz_len,
const char *name, const char *value);
char *envz_entry(const char *envz, size_t envz_len, const char *name);
char *envz_get(const char *envz, size_t envz_len, const char *name);
error_t envz_merge(char **envz, size_t *envz_len,
const char *envz2, size_t envz2_len, int override);
void envz_remove(char **envz, size_t *envz_len, const char *name);
void envz_strip(char **envz, size_t *envz_len);์ด ํจ์๋ค์ glibc ์ ์ฉ์ด๋ค.
argz ๋ฒกํฐ๋ ๋ฌธ์ ๋ฒํผ์ ๋ํ ํฌ์ธํฐ์ ๊ธธ์ด๊ฐ ํจ๊ป ์๋ ๊ฒ์ด๋ค. (argz_add(3) ์ฐธ๊ณ .) envz ๋ฒกํฐ๋ argz ๋ฒกํฐ์ ํน์ํ ํํ๋ก, ๋ฌธ์์ด๋ค์ด "์ด๋ฆ=๊ฐ" ํํ๋ก ๋์ด ์๋ค. ์ฒซ ๋ฒ์งธ '=' ๋ค์ ์๋ ๊ฒ์ ๋ชจ๋ ๊ฐ์ด๋ผ๊ณ ๋ณธ๋ค. '='๊ฐ ์์ผ๋ฉด ๊ฐ์ด NULL์ธ ๊ฒ์ผ๋ก ํ๋ค. (๋ฐ๋ฉด '='๋ก ๋๋๋ ๊ฒฝ์ฐ์ ๊ฐ์ ๋น ๋ฌธ์์ด ""์ด๋ค.)
์ด ํจ์๋ค์ envz ๋ฒกํฐ๋ฅผ ๋ค๋ฃจ๊ธฐ ์ํ ๊ฒ์ด๋ค.
envz_add()๋ envz ๋ฒกํฐ (*envz, *envz_len)์ ๋ฌธ์์ด "name=value"(value๊ฐ NULL์ด ์๋ ๊ฒฝ์ฐ)๋ "name"(value๊ฐ NULL์ธ ๊ฒฝ์ฐ)์ ์ถ๊ฐํ๊ณ *envz์ *envz_len์ ๊ฐฑ์ ํ๋ค. name์ด ๊ฐ์ ํญ๋ชฉ์ด ์กด์ฌํ๋ฉด ์ ๊ฑฐํ๊ณ ์ถ๊ฐํ๋ค.
envz_entry()๋ envz ๋ฒกํฐ (envz, envz_len)์์ name์ ํ์ํ๋ฉฐ, ์ฐพ์ผ๋ฉด ๊ทธ ํญ๋ชฉ์ ๋ฐํํ๊ณ ์์ผ๋ฉด NULL์ ๋ฐํํ๋ค.
envz_get()์ envz ๋ฒกํฐ (envz, envz_len)์์ name์ ํ์ํ๋ฉฐ, ์ฐพ์ผ๋ฉด ๊ทธ ๊ฐ์ ๋ฐํํ๊ณ ์์ผ๋ฉด NULL์ ๋ฐํํ๋ค. (์ฐธ๊ณ ๋ก '=' ์๋ name ํญ๋ชฉ์ด ์์ผ๋ฉด ๊ฐ์ด NULL์ผ ์ ์๋ค.)
envz_merge()๋ envz2์ ๊ฐ ํญ๋ชฉ์ envz_add()๋ฅผ ์ด ๊ฒ์ฒ๋ผ *envz์ ์ถ๊ฐํ๋ค. override๊ฐ ์ฐธ์ด๋ฉด envz2์ ์๋ ๊ฐ์ด *envz์ ์๋ ๊ฐ์ ์ด๋ฆ์ ๊ฐ์ ๋์ฒดํ๊ณ , ์๋๋ฉด ๊ทธ๋ฌ์ง ์๋๋ค.
envz_remove()๋ (*envz, *envz_len)์ name ํญ๋ชฉ์ด ์์ผ๋ฉด ์ ๊ฑฐํ๋ค.
envz_strip()์ ๊ฐ์ด NULL์ธ ํญ๋ชฉ์ ๋ชจ๋ ์ ๊ฑฐํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋ envz ํจ์๋ค์ ๋ชจ๋ ๋ฐํ ํ์
์ด error_t์ด๋ฉฐ, ์ฑ๊ณต ์ 0์ ๋ฐํํ๊ณ ํ ๋น ์ค๋ฅ ๋ฐ์ ์ ENOMEM์ ๋ฐํํ๋ค.
์ด ์ ์์ ์ฌ์ฉํ๋ ์ฉ์ด๋ค์ ๋ํ ์ค๋ช ์ attributes(7)๋ฅผ ๋ณด๋ผ.
| ์ธํฐํ์ด์ค | ์์ฑ | ๊ฐ |
|---|---|---|
envz_add(), envz_entry(),envz_get(), envz_merge(),envz_remove(), envz_strip()
|
์ค๋ ๋ ์์ ์ฑ | MT-Safe |
์ด ํจ์๋ค์ GNU ํ์ฅ์ด๋ค. ์กฐ์ฌํด์ ์จ์ผ ํ๋ค.
#include <stdio.h>
#include <stdlib.h>
#include <envz.h>
int
main(int argc, char *argv[], char *envp[])
{
int i, e_len = 0;
char *str;
for (i = 0; envp[i] != NULL; i++)
e_len += strlen(envp[i]) + 1;
str = envz_entry(*envp, e_len, "HOME");
printf("%s\n", str);
str = envz_get(*envp, e_len, "HOME");
printf("%s\n", str);
exit(EXIT_SUCCESS);
}2017-09-15