Hi~
1. From Cmd.exe mode, if I hit sort
c
b
a
^Z
c
b
a
a
b
c
2. if I hit sort >> test.txt
c
b
a
^Z
3. but then if I hit sort
c
b
a
^Z
doesn't output to crt
c
b
a
a
b
c
why?
else if( !_tcscmp(cmdTokenList[0], _T("sort")) )
{
if(!_tcscmp(cmdTokenList[1], _T(">>")) )
{
SECURITY_ATTRIBUTES fileSec = {
sizeof(SECURITY_ATTRIBUTES), NULL, TRUE
};
HANDLE hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hFile = CreateFile (
cmdTokenList[2], GENERIC_WRITE, FILE_SHARE_WRITE,
&fileSec, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
NULL);
HANDLE hFileDup;
if( !DuplicateHandle(GetCurrentProcess(), hFile,
GetCurrentProcess(), &hFileDup , 0,
FALSE,
DUPLICATE_SAME_ACCESS))
ErrorExit(_T("DuplicateHandle failed"));
CloseHandle(hFile);
si.hStdOutput = hFileDup;
si.hStdInput = GetStdHandle(STD_INPUT_HANDLE);
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);
si.dwFlags |= STARTF_USESTDHANDLES;
isRun = CreateProcess(NULL, cmdTokenList[0], NULL, NULL, TRUE, 0, NULL, NULL,
&si, &pi);
if (! SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout))
ErrorExit(_T("Re-redirecting Stdout failed\n"));
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle(hFile);
}
else
{
si.hStdOutput = GetStdHandle(STD_OUTPUT_HANDLE);
isRun = CreateProcess(NULL, cmdTokenList[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
WaitForSingleObject(pi.hProcess, INFINITE);
}
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
SetStdHandle(STD_OUTPUT_HANDLE, hStdout);
SetStdHandle(STD_INPUT_HANDLE, hStdin);
}
thanks for reading.