- •Динамическое распределение памяти. Связанные списки.
- •Особенности использования связанных списков.
- •Простой связанный список.
- •Библиотека языка с и ввод-вывод.
- •Потоковый ввод-вывод.
- •Текстовые файлы с буферизацией.
- •Переназначение ввода и вывода.
- •Изменение буфера потока.
- •Закрытие потоков.
- •Низкоуровневый ввод и вывод в с.
- •Ввод и вывод символов.
- •Использование функций getc(), putc(), fgetc() и fputc().
- •Простая программа сжатия файла.
- •Использование функций getchar(), putchar(),fgetchar() и fputchar().
- •Использование функций getch() и putch().
Переназначение ввода и вывода.
Система может читать с клавиатуры так же, как она читает из дискового или ленточного файла.
Процесс изменения стандартного устройства ввода или вывода называется переназначением (или переадресацией — redirection) ввода или вывода. Для переназначения ввода используется символ <, а для переназначения вывода >.
redirect<sample.dat
redirect<sample.dat>sample.bak
redirect>sample.bak
Конвейерной пересылкой называется непосредственное соединение стандартного вывода одной программы со стандартным вводом другой программы.
Process1 | process2
Операционная система обеспечит все операции физической пересылки данных с выхода PROCESS 1 на вход PROCESS2.
Изменение буфера потока.
По умолчанию все файлы, открытые при помощи потоковых функций (stdin(), stdout() и stdprn()), буферизируются.
Исключение составляют открытые потоки stderr и stdaux, которые по умолчанию не буферизируются, кроме случаев, когда они используются с группой функций printf() или scanf() — тогда им назначается временный буфер.
Можно задать буферизацию потоков stderr и stdaux при помощи функций setbuf() или setvbuf().
Потоки stdin, stdout и stdprn очищаются автоматически при их заполнении.
При помощи двух функций setbuf() и setvbuf() можно сделать буферизированный поток небуферизированным и наоборот.
Буферы, выделяемые системой, недоступны для пользователя, а буферы, которые назначаются при помощи функций setbuf() и setvbuf(), именуются пользователем, и с ними можно работать как с переменными.
Можно назначить буфер любого размера; при использовании функции setbuf() размер определяется константой BUFSIZ.
Закрытие потоков.
Функция fclose() закрывает отдельный файл, а функция fcloseall() закрывает все открытые потоки(желательно закрывать поток по окончанию работы с ним), за исключением stdin, stdout, stderr, stdprn и stdaux. если ваша программа не закрывает поток явно, то он закрывается автоматически по ее завершению. желательно закрывать поток по окончанию работы с ним.
Функция fclose() возвращает значение 0, если файл закрыт успешно, и — 1 в противном случае.
Низкоуровневый ввод и вывод в С. Ввод и вывод символов. Использование функций getc(), putc(), fgetc() и fputc(). Простая программа сжатия файла. Использование функций getchar(), putchar(),fgetchar() и fputchar(). Использование функций getch() и putch().
Низкоуровневый ввод и вывод в с.
функции низкоуровневого ввода и вывода:
-
Функция
Описание
close()
Закрывает дисковый файл
lseek()
Поиск указанного байта в файле
open()
Открывает дисковый файл
read()
Читает данные в буфер
unlink()
Удаляет файл из подкаталога
write()
Записывает буфер данных
Функции низкоуровневого ввода и вывода не буферизируют и не форматируют данные. они не требуют включения заголовочного файла stdio.h. Объявления низкоуровневых функций дается в заголовочном файле io.h.