2016-07-26 2 views
0

forkコマンドを使ってディレクトリを変更することはできますか?私は、次のしている私のコードにあまり行かず:cでforkを使ってcdコマンドを使う

childpid = fork(); 

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

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

上記の私がlspwd、などのような基本的なコマンドを入力していたときに正常に動作します..それはCDの機能を使用する方法を実現することが可能です?コマンドcd ..を入力できますが、何もしません。例えば

私のプログラムが/Users/username/Desktop/であれば、私はchdirについてのいくつかのものを見てきましたが、私はありません/Users/username/に行くか、ストレート/Users

に入ることができるように、このようなcd ..などのコマンドを使用したいです正確にどのように動作するか/それをどのように使用するか。あなたはchdirは、現在のプロセスの作業ディレクトリを変更するための最良の方法であるmentionnedとして

+3

カレントディレクトリは各プロセスに固有です。シェルプロセスは/ Users/username/Desktopにあり、 'cd ..'と入力すると新しいプロセスが作成され、新しいプロセスは/ Users/usernameに変更されますが、シェルプロセスはディレクトリを変更したプロセスとは異なるプロセスです。 – immibis

答えて

1

は、シェルコマンドはcdだけで作成することになりforkとしてコマンド(およびない親プロセス)を実行しているプロセスのの作業ディレクトリを変更します新しいプロセス。

のchdirの使用のためにあなたが試みることができる:

#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); 
} 
関連する問題