Файловая система и ее функции. Буферизация ввода-вывода. Потоки ввода-вывода (stream). Стандартный ввод-вывод. Представление устройств в виде файлов.
Потоки ввода/вывода:
Потоком называется абстрактное понятие, относящееся к любому переносу данных от источника к приёмнику данных. Файлы – это последовательный поток байтов. Для открытых файлов используются классы потоков ввода/вывода. При открытии файла создаётся соответствующий объект, с которым связан поток. Поток является каналом связи между объектом и устройством или файлом на диске, которые в программе выступают под именем объекта.Функции нижнего уровня, функции файлового ввода/вывода.
Эти функции выполняют небуферизированный ввод/вывод. При открытии файла с ним связывается дескриптор файла. Он принимает целые значения и используется в последующих операциях с файлом: 1) функция открытия файла open(); 2) чтение read(); 3) запись write().Представление устройств в идее файлов.
Стандартный ввод-вывод
Файл с именем stdin – устройство стандартного ввода (файловый дескриптор всегда 0), stdout – стд. вывода (дескриптор 1). Драйвер устройства общается с физическим устройством, а программа работает как бы с файлами вместо реальных устройств. Непосредственным общением с устройством заведует драйвер и BIOS.Стандартные файлы (устройства) ввода-вывода всегда открыты и всегда готовы к работе. Они автоматически наследуются при порождении процесса от родителя.
Стандартные потоки (файлы) при запуске программы можно направлять на конкретные физические устройства (символьный дисплей, файл, принтер, модем, пустое устройство (NUL), и др.)
Например, вывод в программе при помощи функции printf – это вывод на устройство (файл) stdout. По умолчанию вывод направляется на дисплей.
При запуске программы следующей командной строкой:
Program > filename
вывод будет перенаправлен в файл filename.
> - оператор перенаправления стандартного вывода.
Program < filename
Программа будет получать данные не с клавиатуры, а из файла.
< - оператор перенаправления стандартного ввода.
Program1 | Program2
вывод первой программы будет перенаправлен на стандартный ввод второй.
| - оператор перенаправления.
Таким образом, не изменяя код программы, изменили ее поведение.
Гибкость.