特定の標準入力でプログラムを実行しようとしています。私は標準入力に入れたいものがあるファイルのファイルディスクリプタを使用して成功したが、私は標準入力に直接書き込むことができない:execv *とstdinに書き込む
$cat input.test
echo Hello
$
コード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);
}
こと作品:
$./a.out
Hello
$
しかし、私はプログラムが何も表示されませんし、実行し続けるパイプ使用してSTDINに直接書き込むしようとした場合:
をあなたの助け真心を込め、 バスティアン0
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);
}
感謝。
EDIT問題解決:、
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;
}
なぜ他人を下ろしていますか?お問い合わせの心が知りたいです:) – Will
私はすべての答えがdownvoted理由は考えていません。 – Mat