重定向标准输出

时间:2017-04-14 20:11:42

标签: c linux shell

您好,感谢您的关注。我在c中编写自己的shell,我有重定向标准输出的问题。例如,我得到命令:ls -l>>文件,我需要显示输出到文件。你能给我一些解决这个问题的想法吗?感谢。

1 个答案:

答案 0 :(得分:0)

您可能想要使用dup()& dup2(),这是我准备好的两个函数:

void stdout_redirect(int fd, int *stdout_bak)
{
  if (fd <= 0)
    return;
  *stdout_bak = dup(fileno(stdout));
  dup2(fd, fileno(stdout));
  close(fd);
}

void stdout_restore(int stdout_bak)
{
  if (stdout_bak <= 0)
    return;
  dup2(stdout_bak, fileno(stdout));
  close(stdout_bak);
}

以下是如何使用它:

int main(void)
{
  int stdout_bak;
  FILE *fd;

  fd = fopen("tmp", "w");
  stdout_redirect(fileno(fd), &stdout_bak);
  /* Your Stuff Here */
  stdout_restore(&stdout_bak);
  return 0;
}