zoukankan      html  css  js  c++  java
  • 输入输出重定向

    本文解释如何重新从 C 程序, 定向到文件 stdout 再恢复原始 stdout 同一程序中稍后。 C 函数通常用于重定向 stdout 或 stdin 是 freopen()。 将 stdout 重定向到文件称为 FILE.TXT, 使用以下调用:
       freopen( "file.txt", "w", stdout );
    该语句导致所有后续输出, 向 stdout, 它通常定向到转到 FILE.TXT 文件。

    要返回到显示 (默认 stdout), stdout 使用以下调用:
       freopen( "CON", "w", stdout );
    在两个情况, 检查返回值是 freopen() 以确保重定向到实际发生。

    下面是一个短程序来演示是 stdout 重定向:


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

    void main(void)
    {
       FILE 
    *stream ;
       
    if((stream = freopen("file.txt""w", stdout)) == NULL)
          exit(
    -1);

       printf(
    "this is stdout output\n");

       stream 
    = freopen("CON""w", stdout);

       printf(
    "And now back to the console once again\n");
    }

    BOOL   CDnsTestDlg::My_System(
    char *cmd,CString& m_strOutPut)   
    {   
        SECURITY_ATTRIBUTES   lsa;   
        STARTUPINFO   si;   
        PROCESS_INFORMATION   pi,   
    *lppi;   
        HANDLE   hReadPipe,   hWritePipe;   
        
        lsa.nLength   
    =   sizeof(SECURITY_ATTRIBUTES);   
        lsa.lpSecurityDescriptor   
    =   NULL;   
        lsa.bInheritHandle   
    =   TRUE;   
        
        lppi   
    =   &pi;   
        CWaitCursor   waitCursor;   
        
        
    if(!CreatePipe(&hReadPipe,   &hWritePipe,   &lsa,   0))   {   
            AfxMessageBox(
    "Error   on   create   pipe.");   
            
    return   FALSE;   
        }   
        
        memset(
    &si,   0,   sizeof(STARTUPINFO));   
        si.cb   
    =   sizeof(STARTUPINFO);   
        si.dwFlags   
    =   STARTF_USESTDHANDLES   |   STARTF_USESHOWWINDOW;   
        si.wShowWindow   
    =   SW_HIDE;   
        si.hStdOutput   
    =   hWritePipe;   
        
        
    if(!CreateProcess(NULL,   cmd,   NULL,   NULL,   TRUE,   0,   NULL,   NULL,   &si,   &pi))   {   
            AfxMessageBox(
    "Error   on   create   process");   
            
    return   FALSE;   
        }   
        DWORD   cchReadBuffer;   
        CString   strText;   
        TCHAR   ph[
    5000];   
        
        m_strOutPut.Empty();   
        
        
    for(;;)   {   
            cchReadBuffer   
    =   0;   
            
    if(!PeekNamedPipe(hReadPipe,   ph,   1,   &cchReadBuffer,   NULL,   NULL))   break;   
            
            
    if(cchReadBuffer)   {   
                
    if(!ReadFile(hReadPipe,   ph,   4096,   &cchReadBuffer,   NULL))   break;   
                ph[cchReadBuffer]   
    =   0;   
                m_strOutPut   
    +=   ph;;   
            }   
            
    else   
                
    if(WaitForSingleObject(pi.hProcess,   0)   ==   WAIT_OBJECT_0)   break;   
                Sleep(
    500);   
        }   
        
        ph[cchReadBuffer]   
    =   0;   
        m_strOutPut   
    +=   ph;   
        
        CloseHandle(hReadPipe);   
        CloseHandle(pi.hThread);   
        CloseHandle(pi.hProcess);   
        CloseHandle(hWritePipe);     
        
    return   TRUE;   
    }   
  • 相关阅读:
    hdu2066最短路径spfa算法对每个点分别判断0ms过
    关于oj上c++与g++的区别以及一些常见的问题
    hdu1213依旧并查集。求集合的个数
    hdu2112最短路径
    hdu1232最水并查集模版题
    hdu1325最大联通分量+树中点与边数值关系
    hdu2544最短路径spfa模版题
    hdu1856依旧并查集
    hdu1879最小生成树+并查集
    sencha touch 视图(view) show与hide事件探讨
  • 原文地址:https://www.cnblogs.com/ahuo/p/879797.html
Copyright © 2011-2022 走看看