Return 4;

}

}

fclose (in_file);
fclose (out_file);
return 0;
}

Этот простой пример может служить наглядной иллюстрацией ряда общепринятых допущений и соглашений программирования, которые не всегда при­меняются в Windows.

1. Объекты открытых файлов идентифицируются указателями на структуры FILE (в UNIX используются целочисленные дескрипторы файлов). Указа­телю NULL соответствует несуществующий объект. По сути, указатели яв­ляются разновидностью дескрипторов объектов открытых файлов.

2. В вызове функции fopen указывается, каким образом должен обрабаты­ваться файл – как текстовый или как двоичный. В текстовых файлах со­держатся специфические для каждой системы последовательности симво­лов, используемых, например, для обозначения конца строки. Во многих системах, включая Windows, в процессе выполнения операций ввода/вывода каждая из таких последовательностей автоматически преобразуется в нулевой символ, который интерпретируется в языке С как метка конца строки, и наоборот. В нашем примере оба файла открываются как двоичные.

3. Диагностика ошибок реализуется с помощью функции perror, которая, в свою очередь, получает информацию относительно природы сбоя, возни­кающего при вызове функции fopen, из глобальной переменной errno. Вместо этого можно было бы воспользоваться функцией ferror, возвра­щающей код ошибки, ассоциированный не с системой, а с объектом FILE.

4. Функции fread и fwrite возвращают количество обработанных байтов, непосредственно, а не через аргумент, что оказывает существенное влияние на логику организации программы. Неотрицательное возвращаемое зна­чение говорит об успешном выполнении операции чтения, тогда как нуле­вое – о попытке чтения метки конца файла.

5. Функция fclose может применяться лишь к объектам типа FILE(анало­гичное утверждение справедливо и в отношении дескрипторов файлов UNIX).

6. Операции ввода/вывода осуществляются в синхронном режиме, то есть прежде чем программа сможет выполняться дальше, она должна дождаться завершения операции ввода/вывода.

7. Для вывода сообщений об ошибках удобно использовать входящую в биб­лиотеку С функцию ввода/вывода printf, которая даже будет использова­на в первом примере Windows-программы.

Преимуществом реализации, использующей библиотеку С, является ее пере­носимость на платформы UNIX, Windows, а также другие системы, которые под­держивают стандарт ANSI С. Кроме того, в том, что касается производительности, вариант, использующий функции вво­да/вывода библиотеки С, ничуть не уступает другим вариантам реализации. Тем не менее, в этом случае программы вынуждены ограничиваться синхронными операциями ввода/вывода, хотя влияние этого ограничения будет несколько ослаблено использованием потоков Windows.

Как и их эквиваленты в UNIX, программы, основанные на функциях для рабо­ты с файлами, входящих в библиотеку С, способны выполнять операции произ­вольного доступа к файлам (с использованием функции fseek или, в случае тек­стовых файлов, функций fsetpos и fgetpos), но это является уже потолком сложности для функций ввода/вывода стандартной библиотеки С, выше которо­го они подняться не могут. Вместе с тем, Visual C++ предоставляет нестандартные расширения, способные, например, поддерживать блокирование файлов. Нако­нец, библиотека С не позволяет управлять средствами защиты файлов.

Резюмируя, можно сделать вывод, что если простой синхронный файловый или консольный ввод/вывод – это все, что вам надо, то для написания перено­симых программ, которые будут выполняться под управлением Windows, следует использовать библиотеку С.

 








Дата добавления: 2015-08-01; просмотров: 647;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.