Составители:
Рубрика:
{
unsigned long wct;
if (!ReadFi1e(f, buf, sizeof(buf), &n, NULL))
break;
if (n)
WriteFile(out, buf, n, &wct, NULL);
}
while (n == sizeof(buf)); // Если EOF, это условие не выполняется
CloseHandle(f);
}
void main(int argc, char *argv[])
{
if (argc == 1)
{
// утилита cat – ошибки фактически не обрабатываются
// любая ошибка вызывает аварийное завершение программы
MB(«Usage: cat FILENAME [FILENAME ....]»);
exit(9);
}
// Обработать все указанные файлы
while (--argc) docat(*++argv);
exit(0);
}…
Таким образом, происходит работа с файлами на уровне Win32 API.
Обычно при обращении к ReadFile() или WriteFile() работа программного
потока приостанавливается до того момента, когда операция
чтения/записи
будет завершена. Благодаря механизмам асинхронного ввода/вывода про-
грамма может осуществлять ввод/вывод данных и одновременно с этим вы-
полнять какие-либо другие полезные действия (например, сложные матема-
тические вычисления).
Асинхронный ввод/вывод можно реализовать несколькими разными
способами. Проще всего создать новый программный поток и осуществлять
весь ввод/ вывод средствами этого потока. Вместо этого можно использо-
вать перекрывающийся ввод/вывод или порты завершения ввода/вывода.
63
{
unsigned long wct;
if (!ReadFi1e(f, buf, sizeof(buf), &n, NULL))
break;
if (n)
WriteFile(out, buf, n, &wct, NULL);
}
while (n == sizeof(buf)); // Если EOF, это условие не выполняется
CloseHandle(f);
}
void main(int argc, char *argv[])
{
if (argc == 1)
{
// утилита cat – ошибки фактически не обрабатываются
// любая ошибка вызывает аварийное завершение программы
MB(«Usage: cat FILENAME [FILENAME ....]»);
exit(9);
}
// Обработать все указанные файлы
while (--argc) docat(*++argv);
exit(0);
}…
Таким образом, происходит работа с файлами на уровне Win32 API.
Обычно при обращении к ReadFile() или WriteFile() работа программного
потока приостанавливается до того момента, когда операция чтения/записи
будет завершена. Благодаря механизмам асинхронного ввода/вывода про-
грамма может осуществлять ввод/вывод данных и одновременно с этим вы-
полнять какие-либо другие полезные действия (например, сложные матема-
тические вычисления).
Асинхронный ввод/вывод можно реализовать несколькими разными
способами. Проще всего создать новый программный поток и осуществлять
весь ввод/ вывод средствами этого потока. Вместо этого можно использо-
вать перекрывающийся ввод/вывод или порты завершения ввода/вывода.
63
Страницы
- « первая
- ‹ предыдущая
- …
- 61
- 62
- 63
- 64
- 65
- …
- следующая ›
- последняя »
