Linux--Advance getenv的非可重入版本

来源:互联网 发布:网络文献参考文献格式 编辑:程序博客网 时间:2024/06/08 00:17

这里我们将 getenv 获取的环境变量写入全局变量中,所以这个版本不是可重入的。

下面是测试代码:

#include <stdio.h>#include <stdlib.h>#include <limits.h>#include <string.h>#include <pthread.h>#include <errno.h>#define ARG_MAX 100static char envbuf[ARG_MAX];extern char **environ;//用于输出环境变量//void showenv()//{//int i = 0;//while(environ[i]) {//printf("%s\n", environ[i]);//i++;//}//}char *getenv(const char *name){int i, len;len = strlen(name);for (i=0; environ[i]; i++) {if ((strncmp(name, environ[i], len) == 0) && (environ[i][len] == '=')) {strcpy(envbuf, &environ[i][len+1]);return envbuf;}}return 0;}void *thr_func(void *arg){    char *p = getenv(arg);    if (p) printf("thread 1: %s\n", p);    else printf("thread 1: not found\n");}int main(){int  err, tid;err = pthread_create(&tid, 0, thr_func, "SHELL");if (err != 0) {printf("can't create thread\n");exit(1);}char *p = getenv("JOB");if (p) printf("main part: %s\n", p);else printf("main part: not found\n");sleep(1);    return 0;}


1 0