Операции чтения и записи
Windows поддерживает и синхронные и асинхронные операции файлового ввода - вывода на последовательных коммуникационных ресурсах. Асинхронные операции дают возможность вызывающему потоку выполнять другие задачи, в то время, когда операция в фоновом режиме исполняет код. Поток использует функцию ReadFile или ReadFileEx, чтобы читать из коммуникационного ресурса, а функцию WriteFile или WriteFileEx, чтобы писать в коммуникационный ресурс. ReadFile и WriteFile могут выполняться синхронно или асинхронно. ReadFileEx и WriteFileEx могут выполняться только асинхронно.
Характер работы этих функций чтения и записи определяется тем, что исполняется ли функция как асинхронная операция, связаны ли параметры блокировки по времени с дескриптором и связаны ли параметры управления потоком данных с дескриптором.
Поток может также писать в коммуникационный ресурс, используя функцию TransmitCommChar, которая передает заданный символ перед любыми, ожидающими обработки, данными в буфере вывода данных. Эта функция полезна тем, что передает символ сигнала высокого приоритета принимающей системе. Передача символа высокого приоритета, все же зависима от управления потоком данных и блокировок по времени при записи и от операций, которые выполняются синхронно.
Поток может использовать функцию PurgeComm, чтобы сбросить все символы в буфере ввода или вывода данных устройства. PurgeComm может также завершить работу ожидающих обработки операций чтения или записи, даже если эти операции не завершились. Если поток использует PurgeComm, чтобы освободить буфер вывода данных, удаленные символы не передаются. Чтобы освободить буфер вывода данных, в этот период надо убедится, что содержимое его передано, поток тогда может вызвать функцию FlushFileBuffers (синхронная операция).
Обратите внимание! на то, что, хотя функция FlushFileBuffers и является субъектом управления потоком данных, однако она не записывает во время простоя и не будет возвращать значения до тех пор, пока все, ожидающие обработки операции записи, не будут переданы |