2016-07-26 26 views
0

Ist es möglich, Verzeichnisse mit dem Befehl fork zu ändern? Ohne zu viel in meinen Code habe ich folgende:Verwenden des Befehls cd mit fork in c

childpid = fork(); 

if (childpid >= 0) 
{ 
    if (childpid == 0) 
    { 
     ret = execvp(argv[0],argv); 
     exit(ret);  
    } else { 

      waitpid(childpid,&status,0); 
      ret = WEXITSTATUS(status); 
    } 
} 

Das oben funktioniert gut, wenn ich Eingabe grundlegenden Befehls wie ls, pwd, etc .. Ist es möglich, einen Weg zu implementieren, um die CD-Funktion zu verwenden, ? Ich kann den Befehl eingeben cd .., aber es tut nichts.

Zum Beispiel, wenn mein Programm in /Users/username/Desktop/ ist, würde Ich mag Befehle verwenden, wie cd .. in /Users/username/ zu gehen oder in der Lage sein, gerade zu gehen, in /Users

Ich habe ein paar Sachen über chdir gesehen, aber ich bin nicht sicher, genau wie es funktioniert/wie man es benutzt.

+3

Das aktuelle Verzeichnis für jeden Prozess spezifisch ist. Dein Shell-Prozess befindet sich also in/Users/username/Desktop und du tippst "cd ..", und das erstellt einen neuen Prozess und der neue Prozess ändert sich zu/Users/Benutzername, aber der Shell-Prozess nicht, weil es ein anderer Prozess als der, der das Verzeichnis geändert hat. – immibis

Antwort

1

Wie Sie erwähnten chdir der beste Weg ist, um das Arbeitsverzeichnis des aktuellen Prozesses, ein Shell-Befehl cd würde nur ändern, um das Arbeitsverzeichnis des Prozesses ändern Sie den Befehl (und nicht den übergeordneten Prozess) als fork laufen würde erstellen ein neuer Prozess.

für chdir Nutzung könnten Sie versuchen:

#include <stdio.h> 
#include <unistd.h> 
int main() { 
    char cwd[4096]; 
    fputs(getcwd(cwd,4096),stdout); // will print the current working directory 
    fputs("\n",stdout); 
    chdir("/"); // change directory 
    fputs(getcwd(cwd,4096),stdout); // print new working directory 
    fputs("\n",stdout); 
}