编写自己的"IDE"-- 如何在图形界面中实时捕获控制台程序的标准输出.
IDE是集成开发环境(Integrated Development Environment)的简称。印象里有很多出色的IDE,比如JBuilder和Kylix,比如Visual Studio。不知大家是否留意过,大多数IDE本身只提供代码编辑、工程管理等人机交互功能,我们在IDE中编译代码、调试程序时,IDE需要调用命令行的编译器、调试器完成相应的操作。例如,使用Visual Studio编译C++程序时,我们会在IDE下方的Output窗口中看到编译和连接的全过程,虽然我们看不到弹出的DOS窗口,但实际上是IDE先后启动了Microsoft C++编译器cl.exe和连接器link.exe这两个命令行程序,而cl.exe和link.exe的输出又实时反映到了IDE的Output窗口中。还有,我们可以在Visual Studio中配置自己需要的工具程序(比如特殊的编译器),然后让Visual Studio在适当的时候运行这些工具,并将工具程序的输出实时显示到Output窗口中。下图是我在Visual Studio 6.0的Output窗口中运行J2SDK的javac.exe编译java源程序并显示程序中语法错误的情形:
也就是说,大多数IDE工具都可以在集成环境中调用特定的命令行程序(WIN32里更确切的说法是控制台程序),然后实时捕获它们的输出(这多半是输出到标准的stdout和stderr流里的东西),并将捕获到的信息显示在图形界面的窗口中。
这显然是一种具备潜在价值的功能。利用这一技术,我们至少可以
1. 编写出自己的IDE,如果我们有足够的耐心的话;
2. 在我们自己的应用程序里嵌入全文检索功能(调用Borland C++里的grep.exe工具),或者压缩和解压缩功能(调用控制台方式的压缩解压程序,比如arj.exe、pkzip.exe等);