C语言编程: CreateProcess标准输出重定向到文件

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言编程: CreateProcess标准输出重定向到文件相关的知识,希望对你有一定的参考价值。

说明:  CreateProcess创建进程执行不支持简单的 > 符号重定向,system之类的函数执行外部进程可以使用 > 符号直接重定向到文件,但是system这类函数执行命令时,都会弹出控制台窗口,而CreateProcess创建执行进程可以设置属性隐藏这个控制台窗口,后台执行。

示例代码:

#include<windows.h>
#include<shellapi.h>
#include<stdio.h>
#include <string.h>

int my_CreateProcess()
{
    SECURITY_ATTRIBUTES sa;
    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = NULL;
    sa.bInheritHandle = TRUE;

    _unlink("D:/output.log");

    HANDLE h = CreateFile((L"D:/output.log"),
     FILE_APPEND_DATA,
     FILE_SHARE_WRITE | FILE_SHARE_READ,
     &sa,
     OPEN_ALWAYS,
     FILE_ATTRIBUTE_NORMAL,
     NULL);

    PROCESS_INFORMATION pi;
    STARTUPINFO si;
    BOOL ret = FALSE;
    DWORD flags = CREATE_NO_WINDOW;

    ZeroMemory(&pi, sizeof(PROCESS_INFORMATION));
    ZeroMemory(&si, sizeof(STARTUPINFO));
    si.cb = sizeof(STARTUPINFO);
    si.dwFlags |= STARTF_USESTDHANDLES;
    si.hStdInput = NULL;
    si.hStdError = h;
    si.hStdOutput = h;

    TCHAR cmd[]= TEXT("ipconfig");
    ret = CreateProcess(NULL, cmd, NULL, NULL, TRUE, flags, NULL, NULL, &si, &pi);

    if (ret)
    {
        WaitForSingleObject(pi.hProcess, INFINITE);
        qDebug()<<"执行成功....";
        CloseHandle(pi.hProcess);
        CloseHandle(pi.hThread);
        //关闭文件
        CloseHandle(h);
        return 0;
    }
    //关闭文件
    CloseHandle(h);
    qDebug()<<"执行失败....";
    return -1;
}

以上是关于C语言编程: CreateProcess标准输出重定向到文件的主要内容,如果未能解决你的问题,请参考以下文章

Createprocess控制台程序输出重定向

将命令行进程的标准输出重定向到文件

在输出管道上拒绝重定向访问的 CreateProcess

与 CreateNamedPipe 重叠的 CreateProcess 标准输出

如何在 Windows 上的 CreateProcess() 中不继承标准输入、标准输出和标准错误

Windows:如何使用CreateProcess停止重定向Stdout的缓冲