diff options
author | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-10-04 14:38:14 (GMT) |
---|---|---|
committer | Andy Cedilnik <andy.cedilnik@kitware.com> | 2002-10-04 14:38:14 (GMT) |
commit | 0f3661562c396f0d58c09eec54844bbd4d48656d (patch) | |
tree | 93f87969e5afc19c9856c7d9d8eea7380848eafd /Source/cmWin32ProcessExecution.h | |
parent | 38d1ea9b4c6d79fff36cc19e3fb81a5253b6665f (diff) | |
download | CMake-0f3661562c396f0d58c09eec54844bbd4d48656d.zip CMake-0f3661562c396f0d58c09eec54844bbd4d48656d.tar.gz CMake-0f3661562c396f0d58c09eec54844bbd4d48656d.tar.bz2 |
Cleanup RunCOmmand code and move borland one to vtkWin32ProcessExecution, so that it is all in one place... Add timeout option whihc does not work yet, but it should not produce warning any more
Diffstat (limited to 'Source/cmWin32ProcessExecution.h')
-rw-r--r-- | Source/cmWin32ProcessExecution.h | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Source/cmWin32ProcessExecution.h b/Source/cmWin32ProcessExecution.h index c071369..c7b97e5 100644 --- a/Source/cmWin32ProcessExecution.h +++ b/Source/cmWin32ProcessExecution.h @@ -104,6 +104,38 @@ public: void SetConsoleSpawn(const char* prog) { this->m_ConsoleSpawn = prog; } static int Windows9xHack(const char* command); + /** Code from a Borland web site with the following explaination : + * In this article, I will explain how to spawn a console + * application and redirect its standard input/output using + * anonymous pipes. An anonymous pipe is a pipe that goes only in + * one direction (read pipe, write pipe, etc.). Maybe you are + * asking, "why would I ever need to do this sort of thing?" One + * example would be a Windows telnet server, where you spawn a shell + * and listen on a port and send and receive data between the shell + * and the socket client. (Windows does not really have a built-in + * remote shell). First, we should talk about pipes. A pipe in + * Windows is simply a method of communication, often between + * process. The SDK defines a pipe as "a communication conduit with + * two ends; a process with a handle to one end can communicate with + * a process having a handle to the other end." In our case, we are + * using "anonymous" pipes, one-way pipes that "transfer data + * between a parent process and a child process or between two child + * processes of the same parent process." It's easiest to imagine a + * pipe as its namesake. An actual pipe running between processes + * that can carry data. We are using anonymous pipes because the + * console app we are spawning is a child process. We use the + * CreatePipe function which will create an anonymous pipe and + * return a read handle and a write handle. We will create two + * pipes, on for stdin and one for stdout. We will then monitor the + * read end of the stdout pipe to check for display on our child + * process. Every time there is something availabe for reading, we + * will display it in our app. Consequently, we check for input in + * our app and send it off to the write end of the stdin pipe. + */ + bool BorlandRunCommand(const char* command, const char* dir, + std::string& output, int& retVal, bool verbose, + int timeout); + private: bool PrivateOpen(const char*, const char*, int, int); bool PrivateClose(int timeout); |