Книга: Основы программирования в Linux
Другие потоковые функции
Другие потоковые функции
В библиотеке stdio существует ряд других функций, использующих потоки как параметры или стандартные потоки stdin
, stdout
, stderr
:
? fgetpos
— возвращает текущую позицию в файловом протоке;
? fsetpos
— устанавливает текущую позицию в файловом потоке;
? ftell
— возвращает величину текущего смещения файла в потоке;
? rewind
— сбрасывает текущую позицию файла в потоке и переводит ее в начало файла;
? freopen
— повторно использует файловый поток;
? setvbuf
— задает схему буферизации для потока;
? remove
— эквивалент функции unlink
, до тех пор пока параметр path
не является каталогом, в этом случае она эквивалентна функции rmdir
.
Эти библиотечные функции описаны на страницах интерактивного справочного руководства в разделе 3.
Вы можете использовать функции обработки файловых потоков для повторной реализации с их помощью программы копирования файлов. Взгляните на программу copy_stdio.c в упражнении 3.3.
Упражнение 3.3. Третья версия программы копирования файлов
Эта программа очень похожа на предыдущие версии, но посимвольное копирование выполняется с помощью вызовов функций, заданных в файле stdio.h:
#include <stdio.h>
#include <stdlib.h>
int main() {
int c;
FILE *in, *out;
in = fopen("file.in", "r");
out = fopen("file.out", "w");
while((c = fgetc(in)) != EOF) fputc(c, out);
exit(0);
}
Выполнив эту программу, как прежде, вы получите:
$ TIMEFORMAT="" time ./copy_stdio
0.06user 0.02system 0:00.11elapsed 81%CPU
Как это работает
На этот раз программа выполняется 0,11 с, не так быстро, как низкоуровневая блочная версия, но значительно быстрее другой посимвольной версии. Это произошло потому, что библиотека stdio поддерживает внутренний буфер в структуре FILE
, и низкоуровневые системные вызовы выполняются, только когда буфер заполняется. Не ленитесь экспериментировать, тестируя программный код построчного и блочного копирования с помощью stdio, чтобы увидеть, как они действуют в случае проверенных нами трех примеров.
- Другие инструменты для осуществления резервного копирования
- Аргументы функции в Python
- 3. Функции
- Новые функции API для работы с Blob и массивами
- Другие изменения в 7-й версии InterBase
- Датчик расположения и другие датчики
- 6.4 Другие файловые системы
- Математические функции
- Размытые функции
- 7.3. Финансовые функции
- 4.3. Логические функции и таблицы истинности
- B1.7. Функции обработки ошибок