小编Bas*_*ien的帖子

execv*并写入stdin

我正在尝试运行具有特定标准输入的程序.我成功使用了一个文件的文件描述符,其中有我想要放入stdin的内容,但是我无法直接在stdin上编写:

$cat input.test
echo Hello
$
Run Code Online (Sandbox Code Playgroud)

代码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);
}
Run Code Online (Sandbox Code Playgroud)

这样可行 :

$./a.out
Hello
$
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试使用管道直接在STDIN上编写,程序将不显示任何内容并继续运行:

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);
}
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助

亲切地,巴斯蒂安.

编辑问题解决了:

感谢您的回答,这里的代码有效:

int main(void) …
Run Code Online (Sandbox Code Playgroud)

c unix pipe

6
推荐指数
1
解决办法
5701
查看次数

标签 统计

c ×1

pipe ×1

unix ×1