簡體   English   中英

如何派生一個子進程並將程序的所有輸出重定向到該子進程?

[英]How to fork a child process and redirect all of the program's output to the child process?

我正在編寫一個插入另一個程序的printf()它分叉一個子進程,然后將程序的所有輸出重定向到該子進程。 下面的代碼是我編寫的尚未運行的代碼,我想我需要在其上添加此功能。

int printf(char* format, ... )
{
    int res;
    static void *(*mallocp)(size_t size);
    char *error;
    if (!mallocp) {
    mallocp = dlsym(RTLD_NEXT, "printf");
        if ((error = dlerror()) != NULL) {
            fputs(error, stderr);
            exit(1);
        }
    }
    va_list args;
    va_start(args, format);
    res=mallocp(format, args);
    va_end(args);
    return res;
}

我找到了一種類似的解決方案,但略有不同。 在c中的子進程中重定向stdin和stdout我真的不知道在分叉一個子進程並配置好管道之后,如何讓父進程繼續使用系統“ printf” mallocp給出應該重定向到子進程的stdout處理。 (在該示例中,可能類似於system("./calc/calc ");在該領域中,我是新手。 你可以告訴我嗎 ?

順便說一句,我不知道我是否想念整個過程的實現,因為這是一個問題,我也不知道官方的解決方案。

使用“ dup2”並將“ stdout”替換為“ pipe”寫文件描述符。

我認為您的管道從父級到子級的配置都很好。

然后孩子可以從另一端閱讀。

dup2(fd,1); // 1用於標准輸出

第二種選擇:(如果您的管道不再好)

使用共享內存。

創建共享內存對象。

將STDOUT從父級重定向到共享內存。

孩子可以看到它。

這是一個示例http://www.csl.mtu.edu/cs4411.ck/www/NOTES/process/shm/example-1.html

暫無
暫無

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

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