Перечислите переменные среды с C в UNIX - PullRequest
14 голосов
/ 13 августа 2010

Есть ли способ перечислять переменные среды и получать значения с помощью C?

Ответы [ 3 ]

28 голосов
/ 13 августа 2010

Посмотрите на глобальную переменную environ.

extern char **environ;

Может быть определено в unistd.h (взгляните на справочную страницу environ (5) выше).

Вот небольшая демонстрация кода, которую я написал:

#include <stdio.h>
extern char **environ;

int main()
{
    for (char **env = environ; *env; ++env)
        printf("%s\n", *env);
}

Вот как это использовать:

matt@stanley:~/Desktop$ make enumenv CFLAGS=-std=c99
cc -std=c99    enumenv.c   -o enumenv
matt@stanley:~/Desktop$ ./enumenv 
ORBIT_SOCKETDIR=/tmp/orbit-matt
SSH_AGENT_PID=1474
TERM=xterm
SHELL=/bin/bash
... (so forth)
9 голосов
/ 13 августа 2010

Информация об окружающей среде может быть передана как дополнительный параметр в main. Я не знаю, соответствует ли он требованиям или нет, но он определенно работает (проверено на Ubuntu). Просто определите дополнительный аргумент и его массив указателей на символы, оканчивающиеся нулевым указателем. Следующее распечатает лот.

#include <stdio>

int main(int argc, char *argv[], char *envp[])
{
  int index = 0;
  while (envp[index])
    printf("%s\n", envp[index++];
}
2 голосов
/ 02 апреля 2016

В книге "Интерфейс программирования Linux" есть демоверсия на странице 127.

Листинг 6-3. Отображение среды процесса ------------------------------------------------ Proc / display_env.c

#include "tlpi_hdr.h"

extern char **environ;

int
main(int argc, char *argv[])
{
    char **ep;
    for (ep = environ; *ep != NULL; ep++)
        puts(*ep);
    exit(EXIT_SUCCESS);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...