2011-11-21 154 views
1

我想从焦炭redericting标准输出,标准错误到文件和标准输入*。我的目标是让它在C.Redericting stdout和标准输入

当我运行这段代码:

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

文件没有从控制台一些字符串和bash采取论证。臭虫在哪里?

+0

我有一些麻烦了解你的问题,但在我看来,要'bash'的输出重定向到一个文件...正确吗? –

+0

你可以使用'close()'关闭文件描述符(甚至标准输入等),并用不同的手柄打开它们... – Macmade

回答

3

你不想分配到stdout。相反,你(可能)要使用freopen,你的情况,如:freopen("/home/user/file.txt","w", stdout);

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

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

1

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

至于重定向从bash的标准输出,你能不能只是/usr/bin/bash >> /home/user/file.txt打电话了吗?

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; 
} 
相关问题