我的 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) 我有一个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")
工作..如果没有其他解决方案,我可以使用它.
我的代码是使用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')
但在这种情况下,计算机名称是相同的!谢谢.
我正在尝试获取程序中的行数。我正在使用以下代码来做到这一点:
...
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
都很好。
为什么我的程序无法获取这两个环境变量。
我似乎无法让我的代码响应自定义环境变量,因此我编写了一段代码对其进行测试。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) 我必须做我的作业,但我不能在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.
我正在使用 MS Visual Studio 2008 来开发 C++ 应用程序。我使用'getenv()'函数来获取一个环境变量,但是当搜索到的环境变量不存在时,它会抛出一个访问冲突异常。这里有什么问题以及如何纠正它?
文档说如果搜索到的环境变量不存在,getenv() 函数将返回一个 NULL 指针,但为什么我会收到此访问冲突异常?
我有一个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的所有继承.谢谢..
我尝试在 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
似乎忽略了这一点。如何获取系统路径变量的值?
我有一个打印调试日志的功能,必须根据环境变量进行切换。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()
因为这是一个共享库。