Exemplo n.º 1
0
void processline (char *line)
{
    pid_t    cpid;
    int      status,
             n_args;
    char   **argv; // Contains the line data
    char     newline [LINELEN];

    memset(newline, 0, LINELEN);

    if (expand (line, newline, LINELEN) == -1) {
        return;
    }

    n_args = arg_parse(newline, &argv);

    if (n_args == 0)
        return;

    if (try_builtin(n_args, argv)) {
        free(argv);
        last_exit = 0;
        return;
    }
    /* Start a new process to do the job. */
    cpid = fork();
    if (cpid < 0) {
        perror ("fork");
        return;
    }

    /* Check for who we are! */
    if (cpid == 0) {
        /* We are the child! */
        execvp(argv[0], argv);
        perror("exec");
        exit (127);
    }

    free(argv); // Parent frees the malloc

    /* Have the parent wait for child to complete */
    if (wait (&status) < 0)
        perror ("wait");
}
Exemplo n.º 2
0
Arquivo: msh.c Projeto: janaknm/school
void processline (char *line)
{
    pid_t  cpid;
    int    status,
           argc;
    char   **argv;

    argc = arg_parse(line, &argv);

    /* when no arguments, do nothing */
    if (argc == 0)
        return;

    /* try calling a builtin, return if successful */
    if (try_builtin(argc, argv)) 
        return;
    
    /* Start a new process to do the job. */
    cpid = fork();
    if (cpid < 0) {
        perror ("fork");
        return;
    }
    
    /* Check for who we are! */
    if (cpid == 0) {
        /* We are the child! */
        execvp(argv[0], argv);
        perror ("exec");
        exit (127);
    }

    /* free argv when parent */
    free(argv);
    
    /* Have the parent wait for child to complete */
    if (wait (&status) < 0)
        perror ("wait");
}