typestar

Reemplazar el proceso con exec en C

exec nunca retorna si tiene éxito, porque el proceso se convierte en el nuevo programa.

#include <stdio.h>
#include <sys/wait.h>
#include <unistd.h>

int run(const char *program, char *const argv[]) {
    pid_t pid = fork();
    if (pid < 0) {
        return -1;
    }
    if (pid == 0) {
        execvp(program, argv);
        perror("execvp");
        _exit(127);
    }
    int status = 0;
    waitpid(pid, &status, 0);
    return WIFEXITED(status) ? WEXITSTATUS(status) : -1;
}

int list_files(void) {
    char *args[] = {"ls", "-1", NULL};
    return run("ls", args);
}

Cómo funciona

  1. La lista de argumentos se termina con un puntero NULL.
  2. execvp busca en PATH; execv necesita la ruta completa.
  3. Cualquier código tras un exec exitoso es inalcanzable.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
23
Caracteres a escribir
413
Tokens
135
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 77 segundos.

Escribe este fragmento

Paso 2 de 4 en Procesos y señales; paso 8 de 14 en Programación de sistemas.

← Anterior Siguiente →