前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C语言编程: CreateProcess标准输出重定向到文件

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

作者头像
DS小龙哥
发布2022-01-07 15:52:05
1.4K0
发布2022-01-07 15:52:05
举报

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

示例代码:

代码语言:javascript
复制
#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;
}
本文参与?腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com