PS:标准输入/标准错误 ,参考这个来弄吧。
环境:Win7(32位/64位),VC6
1、
printf("*stdin : %x\n", *stdin); printf("*stdout : %x\n", *stdout); printf("*stderr : %x\n", *stderr); printf("stdin : %x\n", stdin); printf("stdout : %x\n", stdout); printf("stderr : %x\n", stderr); printf("GetStdHandle(STD_INPUT_HANDLE) return : %x\n", GetStdHandle(STD_INPUT_HANDLE)); printf("GetStdHandle(STD_OUTPUT_HANDLE) return : %x\n", GetStdHandle(STD_OUTPUT_HANDLE)); printf("GetStdHandle(STD_ERROR_HANDLE) return : %x\n", GetStdHandle(STD_ERROR_HANDLE)); printf("\n");
得到的结果为:
*stdin : 429620 *stdout : 0 *stderr : 0 stdin : 425a30 stdout : 425a50 stderr : 425a70 GetStdHandle(STD_INPUT_HANDLE) return : 3 GetStdHandle(STD_OUTPUT_HANDLE) return : 7 GetStdHandle(STD_ERROR_HANDLE) return : b
2、
http://bbs3.driverdevelop.com/read.php?tid-98473-page-e.html 中有人说到:
“
SetStdHandle 仅仅是对 Peb->ProcessParameters里的 StandardInput 、StandardOutput 、StandardError 3个变量的赋值而已。
printf内部实现类似于
sprintf(buf,format,arglist)
fwrite(stdout,buf);
其中stdout为CRT内部变量,在初始化时已经被设置为 stdout=GetStdHandle(STD_OUTPUT_HANDLE);
(具体看CRT代码,ioinit()),所以,即使你在程序里改变了Peb->ProcessParameters里的 StandardOutput ,stdout没有变化
想重定向PRINTF之类标准库函数,想办法改变stdout吧
”
2.1、
我看了 _ioinit() 里面条用了 宏stdhndl,确实 在_ioinit()中,有 “GetStdHandle(STD_INPUT_HANDLE);”、“GetStdHandle(STD_OUTPUT_HANDLE);”、“GetStdHandle(STD_ERROR_HANDLE);”,但是 是如何 赋值给 stdin、stdout、stderr 的 这个没看出来...
2.2、
printf
3、
A
时间: 2024-10-30 15:08:24