标签: getenv

为什么/proc文件系统中environ的内容与extern environ指向的内容不同?

我的 C++ apache/cgi 中的 getenv() 给了我奇怪的东西,然后我检查了 /proc/${PID_OF_THE_RUNNING_PROCESS} 内的环境,它们不匹配,我认为它们应该匹配,我想知道 /proc 或它出了什么问题是 getenv() 吗?

shell@kernel # xargs --null --max-args=1 echo < /proc/${PID_OF_THE_RUNNING_PROCESS}/environ 
PATH=/usr/bin:/bin:/usr/sbin:/sbin
LD_LIBRARY_PATH=/usr/local/httpd-2.2.19/lib:
Run Code Online (Sandbox Code Playgroud)

PID_OF_THE_RUNNING_PROCESS 的代码

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

void run()
{
    char* s = *environ;
    printf("declare -x  all env begin\n");    
    for (int i = 1; NULL != s; ++i) {
        printf("declare -x  %s\n", s);
        s = *(environ+i);
    }
    printf("declare -x  all env end\n");
}
Run Code Online (Sandbox Code Playgroud)

PID_OF_THE_RUNNING_PROCESS 的控制台日志

declare -x  all env begin
declare -x  FCGI_ROLE=RESPONDER
declare -x  UNIQUE_ID=Wvq-Cn8AAAEAAAkmJlsAAAmM
declare -x  HTTP_HOST=www.example.com …
Run Code Online (Sandbox Code Playgroud)

environment environment-variables getenv environ

5
推荐指数
2
解决办法
2904
查看次数

如果getcwd()和getenv("PWD")不匹配,我该怎么办?

我有一个getcwd()用于获取当前工作目录的构建系统工具.这很好,除了有时人们的路径中有空格,构建系统不支持.你认为你可以只做一个符号链接:

ln -s "Directory With Spaces" DirectoryWithoutSpaces
Run Code Online (Sandbox Code Playgroud)

然后开心.但不幸的是,对我来说,getcwd()解决了所有的符号链接.我尝试使用getenv("PWD"),但它没有指向我回来的路径getcwd().我认为我责备make -C不更新环境变量.现在,getcwd()给我一条这样的道路:

/Users/carl/Directory With Spaces/Some/Other/Directories
Run Code Online (Sandbox Code Playgroud)

getenv("PWD")告诉我:

/Users/carl/DirectoryWithoutSpaces
Run Code Online (Sandbox Code Playgroud)

那么 - 是否有任何类似的功能getcwd()无法解析符号链接?

编辑:

我变了

make -C Some/Other/Directories
Run Code Online (Sandbox Code Playgroud)

cd Some/Other/Directories ; make
Run Code Online (Sandbox Code Playgroud)

然后getenv("PWD")工作..如果没有其他解决方案,我可以使用它.

c macos makefile getcwd getenv

4
推荐指数
1
解决办法
6198
查看次数

忽略Octave中的某些行(但保留它们用于Matlab)

可能重复:
如何检测我是否正在运行MATLAB或Octave?

我的代码是使用MATLAB设计的,我仍然使用它.但是,如果我尝试使用Octave运行它的某些部分,我会收到错误.例如,MATLAB代码使用的pause on是Octave没有的代码.

有没有办法检查哪个编程环境正在使用代码?例如,

if  invoking_env == 'Matlab'
    % do this
else 
    % ok, so do this
end
Run Code Online (Sandbox Code Playgroud)

我可以使用,getenv('COMPUTERNAME')但在这种情况下,计算机名称是相同的!谢谢.

environment matlab octave getenv

4
推荐指数
1
解决办法
125
查看次数

getenv不适用于列和行

我正在尝试获取程序中的行数。我正在使用以下代码来做到这一点:

...

char *cols = getenv("COLUMNS");
printf("cols: %s\n", cols);

char *lines = getenv("LINES");
printf("lines: %s\n", lines);

...
Run Code Online (Sandbox Code Playgroud)

问题是,当我运行此命令时,两者都为空。使用其他环境变量(例如PATH或)运行此命令USER可以正常工作。

我发现奇怪的是,从同一外壳运行echo $COLUMNS和运行echo $LINES都很好。

为什么我的程序无法获取这两个环境变量。

c environment-variables getenv

4
推荐指数
1
解决办法
1837
查看次数

os.getenv()不断返回None

我似乎无法让我的代码响应自定义环境变量,因此我编写了一段代码对其进行测试。getenv没有将我在BASH中设置的环境变量提取到我的python代码中。您能提供的任何帮助将不胜感激。

$ FRUSTRATION="PYTHON!!"
$ echo FRUSTRATION
PYTHON!!
export FRUSTRATION
ipython
import os
very_frustrated = os.getenv("FRUSTRATION")
print(very_frustrated)
None
Run Code Online (Sandbox Code Playgroud)

python getenv python-3.x

4
推荐指数
2
解决办法
1万
查看次数

getenv()分段错误

我必须做我的作业,但我不能在C.中走路.例如;

int main(void) {
  char *path;
  path = getenv("PATH");
  if(path)
    printf("The current path is: %s\n", path);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我运行此代码,我得到"分段错误(核心转储)".我的操作系统是Ubuntu 14.04 LTS.

c getenv

3
推荐指数
1
解决办法
4826
查看次数

使用 getenv 检索不存在的环境变量时出现访问冲突异常

我正在使用 MS Visual Studio 2008 来开发 C++ 应用程序。我使用'getenv()'函数来获取一个环境变量,但是当搜索到的环境变量不存在时,它会抛出一个访问冲突异常。这里有什么问题以及如何纠正它?

文档说如果搜索到的环境变量不存在,getenv() 函数将返回一个 NULL 指针,但为什么我会收到此访问冲突异常?

visual-c++ getenv

2
推荐指数
1
解决办法
1849
查看次数

使用getenv函数

我有一个C程序打印每个环境变量,其名称由stdin给出.它打印变量,如$ PATH,$ USER,但它没有看到我在Linux shell中定义的环境变量...例如,在bash中我定义了我的= 4,并且我希望程序返回4当我输入"我的".

int main  () {
  char * key = (char * )malloc(30);

  scanf("%s", key);

  if(getenv(key) != NULL)
    printf("%s\n", getenv(key));
  else
    printf("NULL\n");

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来改善getenv的结果?我想让它向我展示所有环境变量以及Linux shell的所有继承.谢谢..

c shell getenv

2
推荐指数
1
解决办法
3927
查看次数

检索用户路径环境变量

我尝试在 Windows 上检索路径环境变量。因此,我试过

#include <iostream>
#include <cstdlib>

using namespace std;

int main()
{
  char* path = getenv("Path");
  cout << "current path is:" << path << endl;
  cin.get(); // program shall be closed when it's finished
}
Run Code Online (Sandbox Code Playgroud)

这工作正常,并为我提供了一条路径。我将它与我的实际路径进行了比较,发现我通过该程序检索到的路径是系统路径。但是,我不想获取系统路径,而是获取用户路径。我试图更改"Path"as 在我的系统上"path"引用用户路径变量而"Path"引用系统路径变量的情况,但getenv似乎忽略了这一点。如何获取系统路径变量的值?

c++ windows env environment-variables getenv

2
推荐指数
1
解决办法
1500
查看次数

在共享库/DLL 中仅存储或检查 getenv() 的值一次

我有一个打印调试日志的功能,必须根据环境变量进行切换。print_trace()存储它并重用该值的最佳方法应该是什么,而不是每次调用时检查环境变量?

void print_trace(const char* msg)
{
    const char* s = getenv("DEBUG_TRACE");

    if(!strcmp(s,"ON"))
      printf(msg);
}
Run Code Online (Sandbox Code Playgroud)

没有,main()因为这是一个共享库。

c dll strcmp getenv

1
推荐指数
1
解决办法
382
查看次数