Mac OS XのC/POSIXでシェルを開発しようとしています。cd
コマンドの場合、ほとんどの場合、パスに空白がある場合を除き、ほとんどシェルのディレクトリを変更できます。私は同じパスと使用を取る場合POSIX/C:chdir()ディレクトリをスペースで変更しないでください。
No such file or directory
しかし、たとえば、そのよう
/users/bayesianStudent/desktop
としてパスが正しくディレクトリが、以下、
/users/bayesianStudent/desktop/Spring\ 2016
リターンエラーメッセージを変更します通常の端末では正常に動作します(パスに何も問題ありません)。以下は、問題を複製ダミープログラムです。また
#include <stdio.h>
#include <stdlib.h>
int main()
{
char path[1024];
char cwd[1024];
printf("Please enter path:\n");
gets(path);
printf("Trying to change the path to %s\n", path);
int i = chdir(path);
if(i == 0)
{
printf("sucess\n");
if (getcwd(cwd, sizeof(cwd)) != NULL)
fprintf(stdout, "Current working dir: %s\n", cwd);
else
perror("getcwd() error");
}
else
{
perror("Directory not changed: ");
}
return 0;
}
、私はシェルを開発しておりますので、私はls
などのファイルパスを使用する他のコマンドと同じ問題に遭遇します。
execvp("ls", path, NULL);
パスを入力するときにスペースの前にバックスラッシュを入力していますか?もしそうなら、それをしないでください。 –