什么是windows控制台
控制台为字符界面的应用程序管理(数据的)输入输出。
控制台是为字符界面程序提供I/O的一种接口。它包括一个输入缓冲区和多个屏幕缓冲区。
控制台函数能够以不同级别访问控制台。
(操作系统)系统在启动命令行处理程序的时候创建控制台,在控制台进程中用户可以为新进程创建新控制台或继承命令行处理程序的控制台。
【说明:
如cmd中调用sqlplus时,sqlplus没有新创建一个新的Console,而还是用原来cmd的Console。
上述例子只是说明了在控制台进程中用户可以为新进程继承命令行处理程序(cmd??)的控制台,并没有说明在控制台进程中用户可以为新进程创建新控制台。
】
CreateProcess创建一个带有控制台的控制台进程。
AllocConsole为没有控制台的控制台进程创建新控制台。
FreeConsole删除进程继承或由AllocConsole创建的控制台。
【说明:
一个控制台里的输入输出数据既可以来自纯输入设备(如,键盘、鼠标),也可以来自像硬盘这样的既可输出又可输入的IO设备。
如果一个控制台进程没带有控制台,则该控制台进程就是纯粹的后台进程,因为没带有控制台,就不用和IO设备(包括输入和输出的IO设备)打交道,确切地说是不用于纯输入设备(如,键盘、鼠标)打交道(即所谓用户交互,要实现用户交互首先必须有一个用户人可以看到的窗口,所以这也是为什么每一个控制台对应都有一个窗口的原因。)。当然,只和硬盘(既可输出又可输入的IO设备)打交道的进程也是后台进程。虽然硬盘具有输入功能,但是从硬盘的输入不叫用户交互,而只能从像键盘、鼠标这样的输入设备输入才叫用户交互,因为后者输入的内容是什么是由使用该进程的人来决定的,而前者输入的内容是什么是不由人来决定的。
】
AttacthConsole把进程连接到控制台。一个进程只能连接到一个控制台,但一个控制台可以连接到多个进程。GetConsoleProcessList获取某个控制台所有进程的列表。
【说明:
a、一个进程只能连接到一个控制台:
这里我顺便提一下就是:对于每个进程他有且只能有一个Console:我们可以在GUI程序里面创建Console但是只能创建一个,如果是在CUI程序(即控制台程序)中,我们就不能再创建另外的一个Console(即控制台)了!!!
来自:
http://vanshell.blog.51cto.com/890307/422909
Windows下Console和Win32程序差异
b、通过继承的方式,可以使得一个控制台可以连接到多个进程,即一个控制台被多个进程使用:
在控制台进程中用户可以为新进程继承命令行处理程序(cmd??)的控制台,
例如,cmd中调用sqlplus时,sqlplus没有新创建一个新的Console,而还是用原来cmd的Console。
一个进程只能连接到一个控制台,但一个控制台可以连接到多个进程。GetConsoleProcessList获取某个控制台所有进程的列表。这个类似于,Oracle数据库中的共享连接模式,将各个进程的请求队列化,控制台(进程)分别处理各个请求。
】
参考:
console控制台