簡體   English   中英

重新標記stdout和stdin

[英]Redericting stdout and 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從控制台獲取參數。 蟲子在哪里?

您不想分配給stdout 相反,你(可能)想要使用freopen ,在你的情況下,如: freopen("/home/user/file.txt","w", stdout);

如果/當您在內部進行所有處理時,通常最好編寫代碼以接收FILE *作為參數,並傳遞正確的值。 當你有直接寫入stdout外部代碼時,這不起作用。

編輯:我可能還應該提到freopen另一個嚴重問題 - 沒有提供方法將其恢復到上一個​​流。 這是你再次使用freopen ,並知道將寫入控制台(或其他)的路徑。

stdout不應該用作左值。 嘗試使用fprintf()函數而不是printf()來獲得所需的效果。

至於從bash重定向stdout,你能不能用/usr/bin/bash >> /home/user/file.txt調用它?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM