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

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

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

person Daniel    schedule 23.10.2010    source источник


Ответы (2)


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

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 */
}
person pmg    schedule 23.10.2010

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

person tangrs    schedule 23.10.2010
comment
Или используйте gdb или любой другой отладчик, который у него есть. - person alternative; 23.10.2010