【问题标题】:Redirect the standard output [closed]重定向标准输出[关闭]
【发布时间】:2017-04-14 20:11:42
【问题描述】:

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

【问题讨论】:

  • 你听说过dup2
  • 是的,我听说过它,但我不知道它到底是如何工作的。我读过它,但我不知道如何使用它
  • @ByQ 手册页解释了这一切并提供了一些示例工作。你是什​​么意思你不知道如何使用它。

标签: c linux shell


【解决方案1】:

你可能想要使用 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;
}

【讨论】:

    猜你喜欢
    • 2014-01-20
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多