Я пытаюсь разработать оболочку в C/POSIX в своей Mac OS X. Для команды cd
я могу успешно изменить каталог оболочки с помощью метода chdir
в большинстве случаев, за исключением случаев, когда в пути есть пробелы. Например, такой путь, как
/users/bayesianStudent/desktop
правильно меняет каталог, но следующее,
/users/bayesianStudent/desktop/Spring\ 2016
вернуть сообщение об ошибке:
No such file or directory
Однако, если я выберу тот же путь и использую обычный терминал, он работает нормально (так что с путем все в порядке). Ниже приведена фиктивная программа, которая воспроизводит проблему:
#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);