【问题标题】:Unix Shell in C - Change DirectoryC 中的 Unix Shell - 更改目录
【发布时间】:2013-10-15 18:50:21
【问题描述】:

我是另一个 CS 初学者,正在研究一个简单的 Shell。目前,如果传递了参数,我正在尝试更改当前目录,否则,报告到当前目录。

我尝试在我的程序中使用chdir(),但它显然不起作用。我尝试传递一个标记化的char* 参数。我也尝试了argv[1],但我一定做错了什么,因为两者似乎都不起作用。

另外,我不确定如何使参数指针(包含目录字符串)静态化,这样当我使用 putenv(ARGUMENT HERE) 时就没有问题了。

这是我的代码的相关部分:

else if (strncmp(command[0], "cd", 2) == 0)
    {
        char *argmnts = strtok(0, " ");

        if (arguments != NULL)
        {
            chdir(argmnts); 
            putenv(argmnts); // THE ARG STRING NEEDS TO BE A STATIC COPY
            getcwd(promptBuff, sizeof(argmnts));
        }
    }

指针 argmnts 指向标记化参数部分来自:char strnBuffer[1000],它已经为命令标记化:command[0] = strtok(strnBuffer, " ");

我非常感谢任何帮助/见解。

谢谢。

【问题讨论】:

  • sizeof(argmnts) 将是 4。可能不是你想要的。也许是 sizeof(promptBuff)。
  • chdir() 需要一个路径,putenv() 需要一个格式为 name=value 的字符串。
  • 不止一个问题read
  • chdir()、putenv() 和 getcwd() 都返回值,表明它们是否成功。你忽略了他们所有人。不好的编程习惯。
  • 我把所有使用返回值的行都取出来检查错误,我只是想专注于找出核心问题。但是我一直在使用它们,这就是我知道 chdir() 无法正常工作的方式。它返回 -1 :-/

标签: c shell cd chdir getcwd


【解决方案1】:

您可能在输入行的末尾留下了'\n'。您的 strtok 仅将空格识别为分隔符,因此不会触及换行符。 chdir("dir\n") 将失败,除非您实际上有一个名称末尾带有换行符的目录。

【讨论】:

    猜你喜欢
    • 2013-10-21
    • 2013-01-11
    • 2014-03-02
    • 1970-01-01
    • 2010-12-24
    • 2013-08-17
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    相关资源
    最近更新 更多