c - C 中的 Unix Shell - 更改目录

标签 c shell cd chdir getcwd

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

我尝试在程序中使用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, "") ;

我真的很感谢任何帮助/见解。

谢谢。

最佳答案

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

关于c - C 中的 Unix Shell - 更改目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19388838/

相关文章:

macos - linux中~directory_name和/directory_name有什么区别

c - 与 C 实现相比,GNU Radio 的 I/O 速度较慢

bash - 为什么这个命令不起作用 : cd `echo -n " ~"`

linux - IO 操作 - 为什么不 cd?

regex - 通过 shell 脚本复制目录结构

Linux Webserver - htop 显示极端的 cpu 使用率?

bash - 用于记录某些文件类型所在位置的 Ubuntu Shell 脚本

c - 为什么即使我没有返回值,我也会得到总和作为输出?

c - 同时指定 O_APPEND 和 O_TRUNC 时,它不会截断吗?

将 head 程序转换为 tail C