date、ls などの単純なコマンドを言語 c で解釈できる基本的なシェルを作成しようとしています。
まず、このように PATH 変数を取得して、後で execv() 関数に渡します。
const char *name = "PATH";
char *value;
value = getenv(name)
値を出力すると、次のようになります。
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Ubuntuを実行するためにvirutalboxを使用していることに注意してください。これは、単純な ls コマンドを試すために使用しているコードです。変数行の下のコードでは、ユーザーが書いた実際のコマンドです。この場合は「ls」です。
pid_t pid, wpid;
int status;
pid = fork();
if (pid == 0) {
// Child process
if (execv(value, line) == -1) {
perror("lsh");
}
exit(EXIT_FAILURE);
}
else if (pid < 0) {
// Error forking
perror("lsh");
}
else {
// Parent process
do {
wpid = waitpid(pid, &status, WUNTRACED);
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
そして、私が得る結果はこれです:
lsh: no such file or directory
何か案は?