chdir не работает в c

У меня есть отчий процесс и дочерний процесс, второй, созданный с помощью fork, ребенок получает от отца символ s[] (это может быть что-то вроде "cd Music"), я извлекаю музыку из "cd Music" с помощью strtok, но когда chdir(dir) выполняется, я получаю "Нет такого файла или каталога". Но если я тестирую chdir("Музыка"), я не получаю ошибки. Я хочу изменить рабочий каталог дочернего процесса. Помоги мне, пожалуйста...

 char *dir  = strtok(s," ");
 dir = strtok(NULL," ");
 if(chdir(dir) == -1){
    perror("Cannot change directory");    
}

2 ответа

Нет связи между отцом и ребенком после разветвления (). Это (псевдокод) не работает:

int s[100];
if (fork()) {
    /* father */
    strcpy(s, "cd Music"); /* pass string to child -- NOT! */
    /* ... */
} else {
    /* use uninitialized s */
}

Это работает

int s[100] = "cd Music";
if (fork()) {
    /* father */
    /* ... */
} else {
    /* use children's copy of s */
}

Попробуйте распечатать содержимое каталога. Может быть, его значение не то, что вы ожидали.

Другие вопросы по тегам