在C程序中更改Linux shell中的工作目录

我的目标是编写一个类似于Linux的基本shell的C程序。 除了改变工作目录之外,我有一切工作。 我已经尝试了system()的inputstring为cd ,什么也没有发生。 我也试过chdir("tokened string") ,也没有运气。 有人有主意吗? 这是我的代码的一部分:

  fgets(cmdStr, sizeof(cmdStr), stdin); if( strncmp("quit", cmdStr, 4) == 0 || strncmp("Quit", cmdStr, 4) == 0 ) { break; } else if( strncmp("cd", cmdStr, 2) == 0 ) { char *token = strtok(cmdStr, " "); token = strtok(NULL, " "); chdir(token); } else { system(cmdStr); } } 

是否有可能做到这一点? 或者,这是一个简单的情况下,一些与儿童shell不能做某些事情?

编辑:上面的代码是完整的。

Solutions Collecting From Web of "在C程序中更改Linux shell中的工作目录"

fgets()cmdstr留下尾随的'\n'字符。

如果输入cd foo ,则会调用chdir("foo\n")而不是chdir("foo")

您的chdir调用失败,返回值为-1

请尝试像这样打印errno

 errno = 0; chdir(token); if ( errno != 0 ) { printf( "Error changing dir: %s\n", strerror( errno ) ); } 

基思是正确的: \n最后是杀了你。

你可以做以下来摆脱它:

 char *ptr = cmdStr; <snip> else if( strncmp("cd", cmdStr, 2) == 0 ) { strsep(&ptr, " "); /* skip "cd" */ char *chr = strsep(&ptr, "\n"); /* skip "\n" */ errno = 0; chdir(chr); if ( errno != 0 ) printf( "Error changing dir: %s\n", strerror( errno ) ); } </snip>