getenv3.c

来自「UNIX环境高级编程书的源代码」· C语言 代码 · 共 47 行

C
47
字号
#include <limits.h>#include <string.h>#include <pthread.h>#include <stdlib.h>static pthread_key_t key;static pthread_once_t init_done = PTHREAD_ONCE_INIT;pthread_mutex_t env_mutex = PTHREAD_MUTEX_INITIALIZER;extern char **environ;static voidthread_init(void){	pthread_key_create(&key, free);}char *getenv(const char *name){	int		i, len;	char	*envbuf;	pthread_once(&init_done, thread_init);	pthread_mutex_lock(&env_mutex);	envbuf = (char *)pthread_getspecific(key);	if (envbuf == NULL) {		envbuf = malloc(ARG_MAX);		if (envbuf == NULL) {			pthread_mutex_unlock(&env_mutex);			return(NULL);		}		pthread_setspecific(key, envbuf);	}	len = strlen(name);	for (i = 0; environ[i] != NULL; i++) {		if ((strncmp(name, environ[i], len) == 0) &&		  (environ[i][len] == '=')) {			strcpy(envbuf, &environ[i][len+1]);			pthread_mutex_unlock(&env_mutex);			return(envbuf);		}	}	pthread_mutex_unlock(&env_mutex);	return(NULL);}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?