簡體   English   中英

為子進程重定向IO

[英]Redirect IO for child process

我編寫了一個程序來重定向子進程的IO。 我遇到的問題是新的stdout和stderr不是直接寫入文件,而是在內存中緩沖。 我試圖用setvbuf修復此問題,但是沒有運氣。

函數的返回沒有錯誤。

這非常令人沮喪,因為我在先前的實現中已刪除了緩沖,但是由於某種原因丟失了文件。 無論如何,我不確定為什么setvbuf無法解決我的問題。

if (!freopen(DBGD_CHILD_STDOUT, "w", stdout)){
    perror ("Couldn't open new child-stdout");
    exit (-1);
}

if (!freopen(DBGD_CHILD_STDERR, "w", stderr)){
    perror ("Couldn't open new parent-stderr");
    exit (-1);
}

if (setvbuf (stdout, 0, _IONBF, 0)){
    perror ("Couldn't change buffering mode of stdout");
    exit (-1);
}

if (setvbuf (stderr, 0, _IONBF, 0)){
    perror ("Couldn't change buffering mode of stderr");
    exit (-1);
}

if (execv (ProcessArgs[0], &ProcessArgs[1]) < 0){
    perror ("Couldn't execute process");
    exit (-1);
}

從您的描述和小的代碼塊很難說出實際發生了什么。

但是,在execv之前更改緩沖的嘗試將無效,因為該過程將被整體替換,包括libc stdio狀態。 您需要改為在執行的子進程中更改緩沖。

如果您不控制孩子,則可以使用stdbuf執行它。

暫無
暫無

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

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