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
- La lista de argumentos se termina con un puntero NULL.
execvpbusca en PATH;execvnecesita la ruta completa.- Cualquier código tras un exec exitoso es inalcanzable.
Palabras clave y builtins usados aquí
NULLcharconstifintpid_treturnvoid
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.
Paso 2 de 4 en Procesos y señales; paso 8 de 14 en Programación de sistemas.