Estoy intentando ejecutar un programa con una entrada estándar específica. Tengo éxito mediante el uso de un descriptor de archivo de un archivo donde no es lo que quiero para poner en la entrada estándar, pero no llego a escribir directamente en la entrada estándar:execv * y escriba en stdin
$cat input.test
echo Hello
$
Código C:
int main(int argc, char **argv)
{
int fd = 0;
fd = open("input.test", O_CREAT);
close(STDIN_FILENO);
dup2(fd, STDIN_FILENO);
char *const args[] = { "bash", NULL };
execvp("bash", args);
}
Eso funciona:
$./a.out
Hello
$
Pero si trato de escribir directamente en la tubería STDIN usando el programa muestra nada y sigue funcionando:
int main(int argc, char **argv)
{
int fds[2];
pipe(fds);
close(STDIN_FILENO);
dup2(fds[1], STDIN_FILENO);
write(fds[1], "echo Hello;", 11); // Résults are identics with fds[0]
char *const args[] = { "bash", NULL };
execvp("bash", args);
}
Gracias por su ayuda
Cordialmente, Bastien. Problema
EDITAR resuelto:
Gracias por sus respuestas, aquí el código que funciona:
int main(void)
{
int fd[2];
pid_t pid;
if (pipe(fd) < 0)
return EXIT_FAILURE;
if ((pid = fork()) < 0)
return EXIT_FAILURE;
else if (pid != 0) { /* father */
close(fd[1]);
dup2(fd[0], STDIN_FILENO);
execlp("bash", "bash", (char *)0);
} else { /* son */
close(fd[0]);
write(fd[1], "echo hello\n", 11);
}
return EXIT_SUCCESS;
}
¿por qué están invalidando a los demás?las mentes inquisitivas quieren saber :) – Will
No tengo idea de por qué todas las respuestas fueron downvoted. – Mat