int main(int argc, char* argv[])
{
    func_exec("dir");
    func_cd("..");
    func_exec("dir");
    func_cd("..");
    func_exec("dir");
    func_cd("..");
    func_exec("dir");
    func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
        func_cd("..");
    func_exec("dir");
    exit(0);

}
Beispiel #2
0
void executa_comando(struct command_t *cmd) //execução do comando
{
    const char *cmdname = cmd->argv[0];
    glob_t *globbuf = (glob_t *) malloc(sizeof(glob_t));
    globbuf = expande_glob(cmd);
 
    if(strcmp(cmdname,"cd") == 0) func_cd(cmd->argc,cmd->argv); //comandos internos - sem uso do fork()
    else if(strcmp(cmdname,"pwd") == 0) func_pwd();
    if(strcmp(cmdname,"exit") == 0) func_exit();
    else{ //uso do fork aqui
     //pid_t cpid = fork();
     int wait_pid;
     int status;
     int lastchild;
 
     if (cpid < 0) {
       perror("fork");
       exit(127);
     }
     else if (cpid > 0) { /* pai */
       lastchild = cpid;
       wait_pid = wait(&status);
     }
     else {               /* filho */
       if(globbuf == NULL) execvp(cmdname, cmd->argv);
       else execvp(cmdname, globbuf->gl_pathv);
       perror("exec");
       exit(127);
     }
 
     if(wait_pid < 0) perror("wait");

    }
}