Уроки Iczelion'а




Урок 21. Пайп - часть 2


Консольное приложение может получить эти три стандартных значения, вызвав функцию GetStdHandle, указав хэндл, который она хочет получить. GUI-приложение не имеет консоли. Если вы вызывает GetStdHandle, она возвратит ошибку. Если вы действительно хотите использовать консоль, вы можете вызвать AllocConsole, чтобы зарезервировать новую консоль. Тем не менее, не забудьте вызвать FreeConsole, когда вы уже не будете в ней нуждаться.

Анонимный пайп очень часто используется для перенаправления ввода и/или вывода дочернего консольного приложения. родительский процесс может быть консоль или GUI-приложение, но дочернее приложение должно быть консольным, чтобы это сработало. Как вы знаете, консольное приложение использует стандартные хэндлы для ввода и вывода. Если мы хотите перенаправить ввод/вывод консольного приложения, мы можем заменить один хэндл другим хэндлом одного конца пайпа. Консольное приложение не будет знать, что оно использует один конец пайпа. Оно будет считать, что это стандартный хэндл. Это вид полиморфизма на ООП-жаргоне. Это мощный подход, так как нам не нужно модифицировать родительский процесс никаким образом.

Другая вещь, которую вы должны знать о консольном приложение - это откуда оно берет стандартный хэндл. Когда консольное приложение создано, у родительского приложения есть следующий выбор: оно может создать новую консоль для дочернего приложения или позволить тому наследовать собственную консоль. Чтобы второй метод работал, родительский процесс должен быть консольным, либо, если он GUI'евый, создать консоль с помощью AllocConsole.

Давайте начнем работу. Чтобы создать анонимный пайп, вам требуется вызывать Createрiрe. Эта функция имеет следующий прототип:

Createpipe proto pReadHandle:DWORD, \ pWriteHandle:DWORD,\ ppipeAttributes:DWORD,\ nBufferSize:DWORD

  • рReadHandle - это указатель на переменную типа dword, которая получит хэндл конца чтения пайпа.
  • рWriteHandle - это указатель на переменную типа dword, которая получить хэндл на конец записи пайпа.



  • Содержание  Назад  Вперед