envz_add函数用法详解
envz_add函数简介
- 头文件包含
- 函数定义
#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 \
char *envz_get(const char * envz , size_t envz_len \
error_t envz_merge(char ** envz , size_t * envz_len ,
const char * envz2 , size_t envz2_len \
void envz_remove(char ** envz , size_t * envz_len \
void envz_strip(char ** envz , size_t * envz_len );
envz_add函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘envz_add’ [-Wimplicit-function-declaration]
解决办法:包含头文件
envz_add函数详细描述
这些函数是特定于glibc的。
argz向量是指向字符缓冲区和长度的指针,参见argz_add (3).envz向量是一种特殊的argz向量,即字符串的形式为“name=value”。第一个\(aq=\(aq)之后的所有内容都被认为是值。如果没有\(aq=\(aq),该值被认为是NULL。(而尾随\(aq=\(aq)的值是空字符串“”。)
这些函数用于处理envz向量。
envz_add ()将字符串.RI&“name=value&”(如果value为非空)或.RI&“name&”(如果value为空)添加到envz向量.RI(envz,*envz_len)中,并更新envz和envz_len ,如果存在具有相同name的条目,则删除该条目。
envz_entry ()在envz vector.ri(envz,\envz_len)中查找name,如果找到就返回条目,如果找不到则返回NULL。
envz_get ()在envz向量.RI(envz,\envz_len)中查找name,如果找到,则返回值,如果没有,则返回NULL。(请注意,该值也可以为NULL,即当name的条目不带\(aq=\(aq符号)时。)
envz_merge ()将envz2中的每个条目添加到envz ,就像使用envz_add ()一样。如果override为真,则envz2中的值将取代*envz 中同名的值,否则不是。
envz_remove ()从.RI(*envz,*envz_len)中删除name的条目(如果有的话)。
envz_strip ()删除值为NULL的所有条目。
envz_add函数返回值
所有执行内存分配的envz函数都有一个返回类型error_t(整数类型),如果成功,返回0,如果发生分配错误,返回 ENOMEM 。
envz_add函数使用举例
#include <stdio.h>
#include <stdlib.h>
#include <envz.h>
int
main(int argc, char *argv[], char *envp[])
{
int e_len = 0;
char *str;
for (int i = 0; envp[i] != NULL; i++)
e_len += strlen(envp[i]) + 1;
str = envz_entry(*envp, e_len, "HOME");
printf("%s\en", str);
str = envz_get(*envp, e_len, "HOME");
printf("%s\en", str);
exit(EXIT_SUCCESS);
}
评论区