2013-06-09 2 views
0

Я хочу изменить каталог в UNIX с помощью кода в C file.i попытался это:Является ли эта команда действительной в C?

char command[50]; 
strcpy(command, "cd newdirectory/"); 
system(command); 

но это не work.Other команды с помощью «системы» работы.

+3

Ваша команда будет работать, но только в вызове 'system()'. т. е. если вы выполняете 'system (" cd newdirectory && rm foo ");', 'rm foo' произойдет в' newdirectory'. – zmo

+0

@zmo это была проблема. Я не знал, что он может выполнить команду, но останется в текущей директории. Вы можете сделать это ответом (правильно) – Dchris

ответ

3

Ваша команда будет работать, но только в пределах вызова system(). , например.: если вы делаете system("cd newdirectory && rm foo");, rm foo произойдет в newdirectory.

Это потому, что вызов system() вызывает fork(), где вы меняете среду, но когда она вернется к вашей вызывающей программе, вы вернетесь в свою исходную среду.

Чтобы изменить директорию текущего процесса, вы должны следовать ответ user1929959 в: т.е. usinc в chdir() системного вызова.

+2

Отсутствует критический элемент. система запускает подпроцесс, а затем это подпроцесс, который запускает оболочку и запускает команду cd. Поскольку это происходит в подпроцессе, оно влияет на среду подпроцесса, но даже не затрагивает среду вызывающего процесса. Он не «возвращается» к исходной среде, вызывающий процесс никогда не покидал ее. –

+0

cf [man page] (http://pubs.opengroup.org/onlinepubs/009695399/functions/system.html), вы правы, это действительно 'fork()'. – zmo

+0

Прочитайте http://advancedlinuxprogramming.com/, это поможет вам. –

Смежные вопросы