2017-04-14 214 views
-2

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

+1

你听到的[ dup2](http://man7.org/linux/man-pages/man2/dup.2.html) –

+1

可能的重复[重新路由stdin和标准输出从C](http://stackoverflow.com/questions/584868/ rerouting-stdin-and-stdout-from-c) – 4386427

+0

是的,我听说过它,但我不知道它是如何工作的。我读过它,但我不知道如何使用它 – ByQ

回答

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; 
}