<1--body oncopy="return false" onselectstart="return false"-->
 
К Т П           План занятия                                                              1                                           Страницы  | 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 |

6. Стандартные дескрипторы ввода-вывода

При создании новой консоли система создает три дескриптора, которые обозначаются stdin, stdout, stderr и называются соответственно стандартными дескрипторами ввода, вывода и ошибки. Дескриптор stdin связывается с буфером ввода, а дескрипторы stdout и stderr связываются с буфером экрана. Эти дескрипторы используются в функциях, предназначенных для работы с консолью.

Значения стандартных дескрипторов ввода-вывода можно получить, используя функцию GetstdHandie, которая имеет следующий прототип:
HANDLE GetstdHandie(DWORD dwStdHandle);

где параметр dwStdHandle может принимать одно из следующих значений:
- std_input_handle — дескриптор стандартного ввода;
- std_output_handle — дескриптор стандартного вывода;
- std_error_handle — дескриптор стандартной ошибки.

При успешном завершении функция GetstdHandie возвращает требуемый дескриптор, а в случае неудачи — значение invalid_handle_value.

Установить значения стандартных дескрипторов ввода-вывода можно при помощи функции setstdHandie, которая имеет следующий прототип:
BOOL SetstdHandie(
  DWORD dwStdHandle, // тип дескриптора
  HANDLE hHandle // новое значение дескриптора
) ;

где параметр dwStdHandle принимает те же значения, что и в функции GetstdHandie, а параметр hHandle равен новому значению для стандартного дескриптора. При успешном завершении функция setstdHandie возвращает ненулевое значение, а в случае неудачи — false.

Обычно функция setstdHandie используется для перенаправления потоков стандартного ввода-вывода. В этом случае дескрипторы стандартных потоков ввода-вывода могут быть определены ВЫЗОВОМ функции CreateFile, которая в качестве имени файла (параметр lpNameFile) принимает одно из значений: conin$ или conout$. Остальные параметры устанавливаются следующим образом.

Для входного потока CONIN$:
- dwDesiredAccess — устанавливается в generic_read;
- dwShareMode — устанавливается в file_share_read, если консоль наследуется;
- dwCreationDisposition — устанавливается В OPEN_EXISTING.

Для выходного потока CONOUT$:
- dwDesiredAccess — устанавливается в generic_write;
- dwShareMode — устанавливается в file_share_write, если консоль наследуется;
- dwCreationDisposition — устанавливается в OPEN_EXISTING.

В обоих случаях параметры dwFlagsAndAttributes и hTemplateFile игнорируется, а параметр IpSecurityAttributes используется только для того, чтобы сделать консоль наследуемой.

 

 


Предыдущая        В начало страницы       Следующая
6