Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
getenv()在MySQL UDF中返回null_Mysql_C++11_Environment Variables_Getenv - Fatal编程技术网

getenv()在MySQL UDF中返回null

getenv()在MySQL UDF中返回null,mysql,c++11,environment-variables,getenv,Mysql,C++11,Environment Variables,Getenv,我在C/C++函数getenv中遇到了一个奇怪的问题。该函数在Linux系统Linux Mint 16 64位上的MySQL UDF中使用。我通过编辑文件/etc/environment在系统范围内设置了JAVA_HOME环境变量,当使用env命令时,它与所有其他变量一起打印在shell中,包括user和root。代码很简单,如下所示: char *javaHome; javaHome = getenv("JAVA_HOME"); if (!javaHome) { char *m

我在C/C++函数getenv中遇到了一个奇怪的问题。该函数在Linux系统Linux Mint 16 64位上的MySQL UDF中使用。我通过编辑文件/etc/environment在系统范围内设置了JAVA_HOME环境变量,当使用env命令时,它与所有其他变量一起打印在shell中,包括user和root。代码很简单,如下所示:

char *javaHome;   
javaHome = getenv("JAVA_HOME");
if (!javaHome) {
    char *m = "Error getting JAVA_HOME variable";
    strcpy(message, m);
    return 1;
}
UDF在条件中永久性地返回错误消息,因此javaHome变量始终为null。我创建了另一个简单的C++程序,并将CPP文件放到编译过的UDF库驻留的MySQL插件目录中。p> 代码按预期返回变量的值,即JRE的路径。UDF代码在我的Windows系统上运行良好,但为了让它在Unix系统上运行,我必须稍微修改代码,并用GetEnvironmentVariableA函数替换getenv函数。我想不出是什么问题。任何指点都将不胜感激


编辑:我已经测试了HOME变量的结果,奇怪的是输出是/etc/mysql/而不是我预期的/root/。UDF是否有自己的环境或类似的环境?

尝试“extern char**environ”一个以null结尾的数组,指向以null结尾的字符串,就像argv一样。这将为您提供一个所有环境变量的列表,这样您就可以判断是环境还是getenv造成的。嗨,约翰,谢谢你的评论。结果是权限问题。在重新启动服务器后,我使用root权限再次执行了UDF,它成功了。因此,只有一个常见的Unix问题:关于,chris,你说在root权限下再次执行UDF是什么意思?如中所示,根mysql用户?还是将mysql服务器作为根用户运行?
#include <iostream>
#include <stdlib.h>

using namespace std;

int main() {        
char *javaHome = getenv("JAVA_HOME");
cout << javaHome;
return 0;
}