Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lec_11_Pres.doc
Скачиваний:
5
Добавлен:
05.12.2018
Размер:
377.86 Кб
Скачать

4. Стандартні потоки, перескерування потоків

Стандартні потоки С. На початку виконання кожної С-програми автоматично відкриваються три стандартні потоки:

  • stdin - стандартний потік введення, який за правилами замовчування пов'язується з клавіатурою;

  • stdout - стандартний потік виведення, який найчастіше пов'язується з виведенням даних на екран;

  • stderr - стандартний потік повідомлень про помилки, який теж здебільшого скеровується на екран.

Ці потоки мають визначені імена, поза цим вони нічим не відрізняються від інших потоків, їх можна використовувати в усіх операціях файлового введення/виведення.

Перескерування потоку. Важливо, що стандартні потоки можна перескеровувати (перепризначати), тобто пов'язувати їх зі заданим файлом чи пристроєм. Перескерування підтримується не всіма операційними системами, але воно реалізоване в MS DOS, Windows, Unix, OS/2. Застосовуючи перескерування, можна простим способом записати в файл всі дані, які в програмі передаються у стандартний потік виведення, чи організувати зчитування з файлу тих даних, які згідно з алгоритмом програми повинні надходити зі стандартного потоку введення.

Перескерування потоків виконує функція

FILE* freopen (char* fname, char* fmode, FILE* fp);

Ця функція пов'язує потік fp з файлом, ім'я якого задає параметр fname, а режим доступу до даних - параметр fmode. Значення та форми задання параметрів fname і fmode такі ж, як і у відповідних параметрів функції fopen (). За умови успішного виконання функція freopen () повертає вказівник на створений потік, а в разі помилки - константу NULL.

Слід пам'ятати, що після перескерування stdout всі операції виведення (зокрема, виведення підказок) будуть виконуватись не на екран, а в заданий файл. Аналогічно, в разі перескерування потоку введення stdin, всі дані, які за замовчуванням вводяться з клавіатури, будуть зчитуватись зі заданого файлу. Стандартні потоки не треба ні відкривати, ні закривати - ці дії виконуються автоматично.

Приклад перескерування стандартного потоку виведення подано в наступній короткій програмі, де перше звертання до функції puts () викликає виведення повідомлення на екран, а друге - у файл example.out.

/***************************************************************************/

/* Приклад перескерування стандартного потоку виведення */

/*******************************************************************************/

#include <stdio.h>

int main (void)

{

puts("\n\t” Це повідомлення виводиться на екран. \n");

freopen ("example.out", "w", stdout); /* потік скеровано в файл */

puts("Дане повідомлення буде записане в файл. \n ");

return 0;

}

MS DOS дозволяє також здійснювати перескерування стандартних потоків з командного рядка. Для цього використовують символи < та >, за якими вказують ім'я файла перескерування. Наприклад, запуск виконавчого коду програми countmax.exe з командного рядка у формі:

countmax.exe < numbers.dat > results.dat

вказує, що в процесі роботи програми countmax.exe дані, які мають вводитись зі стандартного вхідного потоку, будуть зчитуватись з файла numbers.dat, а дані, які виводяться у стандартний потік виведення, будуть записуватись у файл results.dat.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]