引入头文件
1 |
重定向输入输出流
将外部进程的输入输出流重定向到文件,具体是从文件读取输入流,进程产生的输出重定向到文件中。启动进程的父进程只是进行监控。注意重定向到文件需要配置安全配置。
- 安全配置
1
2
3
4
5SECURITY_ATTRIBUTES saAttr;
memset(&saAttr,0,sizeof(saAttr));
saAttr.nLength = sizeof(SECURTIY_ATTRIBUTES);
saAttr.bInheritHandle = TRUE;
saAttr.lpSecurityDescriptor = NULL; - 文件句柄
1
2
3
4
5// 设置读取文件内容的句柄
fileReadHandle = (HANDLE)CreateFile(input_path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, &saAttr, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// 输出写入文件的句柄
fileWriteHandle = (HANDLE)CreateFile(output_path, GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, &saAttr, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
SetFilePointer(fileWriteHandle, NULL, NULL, FILE_BEGIN); - 子进程配置
1
2
3
4
5
6
7
8
9
10
11
12STARTUPINFO si;
PROCESS_INFORMATION pi;
memset(&si, 0, sizeof(si));
si.cb = sizeof(si);
// 标准错误重定向到输出文件
si.hStdError = fileWriteHandle;
// 标准错误重定向到输出文件
si.hStdOutput = fileWriteHandle;
// 标准输入重定向到输入文件
si.hStdInput = fileReadHandle;
si.dwFlags |= STARTF_USESTDHANDLES;
ZeroMemory(&pi, sizeof(pi)); - 启动进程
1
CreateProcess(NULL, run_cmd, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, 0, &si, &pi
Judge的全部代码文件
1 | // WinJudge.cpp : 定义控制台应用程序的入口点。 |
Windows内存泄漏检查工具VLD使用
https://kinddragon.github.io/vld/
安装之后,将对应的lib和dll和头文件加到项目中。并且引用
1 | #include "vld.h" |
便可以引入了