Программирование для Windows NT (том 2)



         

Установка соединения с каналом со стороны клиента - часть 3


/p>

В дополнение к перечисленным выше атрибутам, через параметр dwFlagsAndAttributes вы можете передать любую логическую комбинацию флагов, перечисленных ниже:

Флаг

Описание

FILE_FLAG_WRITE_THROUGH

Отмена промежуточного кэширования данных для уменьшения вероятности потери данных при аварии

FILE_FLAG_NO_BUFFERING

Отмена промежуточной буферизации или кэширования. При использовании этого флага необходимо выполнять чтение и запись порциями, кратными размеру сектора (обычно 512 байт)

FILE_FLAG_OVERLAPPED

Асинхронное выполнение чтения и записи. Во время асинхронного чтения или записи приложение может продолжать обработку данных

FILE_FLAG_RANDOM_ACCESS

Указывает, что к файлу будет выполняться произвольный доступ. Флаг предназначен для оптимизации кэширования

FILE_FLAG_SEQUENTIAL_SCAN

Указывает, что к файлу будет выполняться последовательный доступ от начала файла к его концу. Флаг предназначен для оптимизации кэширования

FILE_FLAG_DELETE_ON_CLOSE

Файл будет удален сразу после того как приложение закроет его идентификтор. Этот флаг удобно использовать для временных файлов

FILE_FLAG_BACKUP_SEMANTICS

Файл будет использован для выполнения операции выгрузки или восстановления. При этом выполняется проверка прав доступа

FILE_FLAG_POSIX_SEMANTICS

Доступ к файлу будет выполняться в соответствии со спецификацией POSIX

И, наконец, последний параметр hTemplateFile предназначен для доступа к файлу шаблона с расширенными атрибутами создаваемого файла.

В случае успешного завершения функция CreateFile возвращает идентификатор созданного или открытого файла (или каталога), а при работе с каналом Pipe - идентификатор реализации канала.

При ошибке возвращается значение INVALID_HANDLE_VALUE (а не NULL, как можно было бы предположить). Код ошибки можно определить при помощи функции GetLastError.

В том случае, если файл уже существует и были указаны константы CREATE_ALWAYS или OPEN_ALWAYS, функция CreateFile не возвращает код ошибки. В то же время в этой ситуации функция GetLastError возвращает значение ERROR_ALREADY_EXISTS.

Приведем фрагмент исходного текста клиентского приложения, открывающего канал с именем $MyPipe$ при помощи функции CreateFile:

char   szPipeName[256];

HANDLE hNamedPipe;

strcpy(szPipeName, "\\\\.\\pipe\\$MyPipe$");

hNamedPipe = CreateFile(

    szPipeName, GENERIC_READ | GENERIC_WRITE,

    0, NULL, OPEN_EXISTING, 0, NULL);

Здесь канал открывается как для записи, так и для чтения.




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