setenv, unsetenv, putenv

Я работаю над специальной оболочкой для класса системного программирования. Нам было поручено реализовать встроенные команды 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...

Если я запускаю printenv , он работает правильно, но если я попытаюсь установить новую переменную с помощью putenv () или setenv () my printenv () команда возвращает то же самое, поэтому похоже, что она не работает.

В качестве примечания, проблема может быть не в функциях или в том, как я их вызвал, потому что моя оболочка выполняет команды так, как если бы она должна была отформатировать подстановочный знак ( * или ? ), что, я не уверен, должно произойти.

5
задан Francesco Boi 20 January 2019 в 22:44
поделиться