重定向stdout和stdin

时间:2011-11-21 21:23:20

标签: c stdout filestream stdin

我想重新发送stdout,stderr来文件和来自char *的stdin。我的目标是在C中制作。

当我运行此代码时:

int main(){
        stdout=fopen("/home/user/file.txt","w");
    printf("aaaa");
    printf("\nbbbb");
    system("/bin/bash");
    sprintf("stdin","exit");
    return 0;
}

文件没有一些字符串和bash从控制台获取参数。 bug在哪里?

3 个答案:

答案 0 :(得分:3)

您不想分配给stdout。相反,您(可能)想要使用freopen,例如:freopen("/home/user/file.txt","w", stdout);

如果/当您在内部进行所有处理时,通常最好编写代码以接收FILE *作为参数,并传递正确的值。当你有外部代码直接写入stdout时,这不起作用。

编辑:我可能还应该提到freopen的另一个严重问题 - 没有提供方法将其恢复到上一个​​流。您可以再次使用freopen,并知道将写入控制台的路径(或其他)。

答案 1 :(得分:1)

stdout不应该用作左值。尝试使用fprintf()函数而不是printf()来获得所需的效果。

至于从bash重定向stdout,你不能只用/usr/bin/bash >> /home/user/file.txt调用它吗?

答案 2 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <io.h>

int main(void){
    int ret;
    FILE *fp;
    int  stdout_bk;

    stdout_bk = dup(fileno(stdout));
    fp=fopen("/home/user/file.txt","w");
    dup2(fileno(fp), fileno(stdout));
    ret = system("/bin/bash");
    //flushall();//for vc
    fflush(stdout);//for gcc 
    fclose(fp);

    dup2(stdout_bk, fileno(stdout));//restore

    return 0;
}