我正在做一个项目,我需要创建一个能够在目录之间切换并连续输出当前目录的shell,这与Linux中的正常情况完全相同。
下面是我目前拥有的代码
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <fcntl.h>
#include <string.h>
#define BUFFERSIZE 1024
int main(int argc, char* argv[])
{
char buf[BUFFERSIZE];
int n;
printf("1730sh:~$ \n");
while ((n = read(STDIN_FILENO, buf, BUFFERSIZE)) > 0)
{
buf[n] = 0;
buf[strlen(buf)-1] = '\0';
int i = 0;
char* array[10];
char* token1 = strtok(buf, " ");
char* newarray[10];
int exitIndicator = 0;
char* directOut;
char* directory;
while ((token1 != NULL))
{
array[i++] = token1;
token1 = strtok(NULL, " ");
}//while
array[i] = NULL;
for (int j = 0; j < i; j++)
{
if (!strcmp(array[j], "cd"))
{
directory = array[j+1];
int change = chdir(directory);
exitIndicator = 1;
}
}
printf("1730sh:~%s$ \n", directory);
}
}
这段代码的问题是,在从头更改目录后,如果我输入另一个命令并运行它,它会返回到其主目录。
Ps:在完整的代码中,cat file1. txt像它应该的那样工作,所以只需假设它工作,输出它应该的东西。
./main
1730sh:~$
cd Ghioalda-Edward-p3
1730sh:~Ghioalda-Edward-p3$
cat file1.txt
1730sh:~$
1条答案
按热度按时间toe950271#
如果命令 * 不是 *
cd
,则会有以下两行:您正在使用***uninitialized***指针
directory
进行打印,该指针的值(指向的位置)是 * 不确定的 *,这将导致 * 未定义的行为 *。作为一个简单的解决方案,我建议你创建另一个变量,一个数组,来保存当前目录。在主阅读循环 * 之外 * 定义该变量,当你改变目录时复制到该变量中。
比如说