ACh*_*pko 5 c++ unix shell fork environment-variables
我正在为系统编程类开发一个自定义shell.我们被指示使用一些检查手册页来实现内置命令setenv()和unsetenv()命令.putenv()
我的问题是,setenv(char*, char*, int)和putenv(char*)似乎并没有在所有的工作.我执行输入命令的代码如下:
//... skipping past stuff for IO redirection
pid = fork();
if(pid == 0){
//child
if(!strcmp(_simpleCommands[0]->_arguments[0],"printenv")){
//check if command is "printenv"
extern char **environ;
int i;
for(i = 0; environ[i] != NULL; i++){
printf("%s\n",environ[i]);
}
exit(0);
}
if(!strcmp(_simpleCommands[0]->_arguments[0],"setenv")){
//if command is "setenv" get parameters char* A, char* B
char * p = _simpleCommands[0]->_arguments[1];
char * s = _simpleCommands[0]->_arguments[2];
//putenv(char* s) needs to be formatted A=B; A is variable B is value
char param[strlen(p) + strlen(s) + 1];
strcat(param,p);
strcat(param,"=");
strcat(param,s);
putenv(param);
//setenv(p,s,1);
exit(0);
}
if(!strcmp(_simpleCommands[0]->_arguments[0],"unsetenv")){
//remove environment variable
unsetenv(_simpleCommands[0]->_arguments[0]);
exit(0);
}
//execute command
execvp(_simpleCommands[0]->_arguments[0],_simpleCommands->_arguments);
perror("-myshell");
_exit(1);
}
//omitting restore IO defaults...
Run Code Online (Sandbox Code Playgroud)
如果我运行printenv它正常工作,但如果我尝试使用任何一个putenv()或setenv()我的printenv()命令设置一个新的变量返回完全相同的东西,所以它似乎没有工作.
作为一个侧面说明,问题可能不是与功能或我怎么叫他们,因为我的外壳执行命令,就像它不得不格式化一个通配符(*或?)其我不知道应该发生.