22939

ВВЕДЕННЯ / ВИВЕДЕННЯ

Лекция

Информатика, кибернетика и программирование

Перед тим як розпочати роботу з потоком його необхідно відкрити за допомогою функції FILE fopenchar filename char mode. Функція формує потік з даним файлом і повертає результат у вигляді покажчика на обєкт типу FILE який містить всю інформацію необхідну для роботи з потоком адресу та розмір буфера індексзсув поточної позиції в буфері режим оборобки інформації і т. FILE fp; fp=fopenfile1.txt a; відкриття файлу file1.

Русский

2013-08-04

48 KB

1 чел.

ВВЕДЕННЯ / ВИВЕДЕННЯ

Збереження та обробка інформації на зовнішніх пристроях  здійснюється за допомогою файлових  типів даних. Файли  як тип даних являють собою послідовності однотипних комполнентів з певними засобами до їх доступу та обробки. У мові Сі всі файли розглядаються як послідовності символів (байтів).  Бібліотеки Сі підтримують три рівні  обробки таких файлів: потоковий В/В, В/В нижнього рівня та В/В для консолі та портів. Ми розглянемо тільки потоковий рівень.

ПОТОКОВИЙ В/В

На даному рівні обмін даними між ОП та файлом на ЗП здійснюється побайтно фіксованими порціями – блоками, які формуються і зберігаються в спеціальних системних полях ОП – буферах. При читанні з файлу дані спочатку блоками заносяться в буфер, а потім вже з нього за допомогою функцій В/В передаються  програмі. При запис в файл  функції В/В попередньо заносять дані (побайтно)   в буфер і при його заповненні  весь блок разом передається в файл на ЗП.

Потік – це певний файл разом з засобами буферизації. При роботі з потоком можливі наступні дії:

  1.  відкриття та закриття потоку (функції  fopen(…),  fclose(..));
  2.  В/В : символів, рядків, форматованих даних, порцій даних довільної довжини (функції  getc(…), putc(…), fgets(…), fputs(…), fprintf(…), fscanf(…));
  3.  аналіз помилок операцій В/В;
  4.  керування буферизацією потоку (розмір буферу і т.д.);
  5.  керування буферним покажчиком (індексом потоку) (=поточною позицією в потоці).

Перед тим як розпочати роботу з потоком його необхідно відкрити за допомогою функції

FILE *fopen(char * filename, char *mode).

Функція формує потік з даним файлом і повертає результат у вигляді покажчика на об’єкт типу FILE, який містить   всю інформацію необхідну для роботи з потоком (адресу та розмір буфера, індекс(зсув) поточної позиції в буфері , режим оборобки інформації  і т.д.).  Потік може відкриватись в текстовому  або бінарному режимах , для запису, читання  або для запису і читання інформаціїї. Режим задається  параметром  mode.

В текстовому режимі (він встановлюється за замовчуванням) при читанні пара символів CR(=13), LF(=10=’\n’)  замінюється на один – LF, а при записі відбувається обернена заміна кожного символу LF на пару символів CR, LF.  Ознакою бінарного режиму є буква b. Нпр.,

w+b  – файл відкривається для модифікаціїї, при цьому він попередньо спустошується;

r -  тільки для читання;

w  - тільки для запису (в кінець файлу), при цьому файл попередньо спустошується;

a  - для дозапису в кінець файлу.

r+” – для модифікації існуючого файлу читання та запису ;

a+”   для модифікації  і дозапису в кінець файлу.

Модифікація файлу означає можливість читати та писати в один і той же файл. При переходах від операцій  читання до записів та навпаки повинно бути звернення до функцій:  fflush(…) (=примусовий запис буфера в файл) або   fseek(…) (=призначає нову  поточну позицію в буфері) .

 Нпр.  FILE *fp;

           fp=fopen(“file1.txt”, “a+”); /* відкриття файлу  file1.txt для модифікації і                                    доповнення  */

При відкритті файлу можливі помилкові ситуації. Тоді fopen повертає NULL:

if ((   fp=fopen(“file1.txt”, “a+”)==NULL)

                  {perror(“помилка при відкритті  файлу file1.tx); exit(0);}

 

Коли Сі-програма розпочинає роботу автоматично для неї відкриваються три стандартних потоки:  stdin (для клавіатури ), stdout (для екрану) і stderr (для виведення повідомлень про помилки на екран ).

Функція   int  fclose(FILE *fp)  вивантажує  буфер в файл, звільнює всі автоматично залучені для даного потоку буфери  і перериває зв'язок з файлом. Повертає  EOF  у випадку помилковою ситуації і 0 у супротивному.

int getc(FILE *fp) – повертає наступний символ з потоку або ЕОF, якщо файл закінчився або виникла помилкова ситуація .

int putc( int c, FILE *fp) -  записує символ с в . Повертає с або ЕОF у випадку помилки.

int fgets (char *s, int n, FILE *fp) – читає n-1 символ в рядок s . При появі символу ‘\n достроково закінчує читання. При цьому ‘\n також записується в s.  В кінці рядка  записує ‘\0. Повертає значення  s або NULL  у разі закінчення файлу або виникнення помилкової ситуації.

int fputs (char *s, FILE *fp)  - записує в потік рядок s . Повертає EOF у випадку виникнення помилкової ситуації.

int fseek  (FILE *fp, long  offset, int  pt) – зсуває  буферний покажчик в файлі на  offset   байтів відносно:

    початку файлу     – для  pt=0;

    кінця файлу          -  для  pt=2;                                               

    поточної позиції  -  для  pt=1.

Наступна операція В/В буде виконуватись з позиції, на яку вказує  оновлений  буфернимй покажчик.  Пи помилкових ситуаціях функція повертає -1.

fseek  (fp,   oL, 2) – буферний покажчик – в кінці файлу.

fseek  (fp,   oL, 0)  - буферний покажчик – на початку  файлу.

long ftell  (FILE *fp) – повертає поточне значення  індексу буфера.

Прикл.  

       /* копіювання файлів в  стандартний потік stdout ;

           імена файлів задаються в командному рядку */

#include <stdio.h>

void filecopy(FILE *);

 main (int argc, char *argv[])

{ FILE *fp;

  if (argc==1) /* аргументів немає

                          копіюється стандартний потік stdin */

                       filecopy(stdin)

                 else  while (--argc>0)

                            if ((   fp=fopen(*++argv, “r”)==NULL)

                  {printf(“помилка при відкритті  файлу:%s,  *argv); break;}

                  else { filecopy(fp); fclose(fp);}

}

void filecopy(FILE * fp)

/* копіювання файлу стандартний потік stdout */

{ int c;

 while ((c=getc(fp)!=EOF)

            putc(c,stdout);

}

/* modifмодифікація  файлу.  Відбувається пошук  рядків з префіксом  ‘#’  і копіювання їх в кінці файлу без цього префіксу */

#define MAXLINE  1024

void   modif (char *filename)

{ long begoff , endoff;

  char line[MAXLINE];

  FILE *fp;

  if (( fp=fopen(filename, “w+”)==NULL) return 0;

  if ( fseek(fp,0L,2)== -1) return 0;

   endoff=ftell(fp);

   if ( fseek(fp,0L,0)== -1) return 0;

   for (begoff=0; begoff< endoff; begoff+=strlen(line) )

      { fgets(line, MAXLINE, fp);

         if (line[0]==’#’)

               { if (fseek(fp, 0L,2)== -1) return 0;

                  fputs(line+1, fp);

                   }

         if (fseek(fp, begoff + strlen(line),0)== -1) return 0;  

      }

      fclose(fp);    

                 

}


 

А также другие работы, которые могут Вас заинтересовать

74344. ОБЩАЯ ХАРАКТЕРИСТИКА ЗАДАЧИ РАСЧЕТА И АНАЛИЗА УСТАНОВИВШИХСЯ РЕЖИМОВ. ЦЕЛЬ РАСЧЕТОВ. ОСНОВНЫЕ ДОПУЩЕНИЯ ПРИ РАСЧЕТЕ РЕЖИМОВ 95.5 KB
  Естественно такая электрическая цепь обязательно включает в себя ИП и ЭП как составные части и в едином смысле понятие электрической сети формально совпадает с понятием ЭЭС как электрической цепи. При решении ряда задач эксплуатации развития и проектирования электрических сетей необходимо оценить условия в которых будут работать потребители и оборудование электрической сети. Также эти оценки дают возможность установить допустимость анализируемого режима при передаче по сети данных мощностей при подключении новых и отключении...
74345. РАСЧЕТ И АНАЛИЗ УСТАНОВИВШЕГОСЯ РЕЖИМА УЧАСТКА ЭЛЕКТРИЧЕСКОЙ СЕТИ 1.09 MB
  В качестве участка может рассматриваться любой элемент трехфазной электрической сети (линия электропередачи, трансформатор и т.д.), в дальнейшем именуемый также общим термином — электропередача. Предварительно рассмотрим участок — электропередачу, схема замещения которого состоит из одной продольной ветви с сопротивлением
74346. ПРЕДСТАВЛЕНИЕ КОМПЕНСИРУЮЩИХ УСТРОЙСТВ 158 KB
  Создаются возможности регулирования напряжения в узлах сети и на зажимах электропотребителей: Реактивная мощность передаваемая от электростанции и других центральных источников загружает все элементы электрической сети уменьшая возможность передачи активной мощности. Поэтому по экономическим соображениям потребность в реактивной мощности в большей ее части необходимо удовлетворять за счет установки местных источников реактивной мощности. В этом случае уменьшается передача реактивной мощности по участкам сетей: снижаются потери...
74347. Составление схем замещения сетей одного или нескольких напряжений. Учет трансформации 64 KB
  Схема имеет 5 линий различного класса напряжения и 5 подстанций ступеней трансформации. Например если подстанция ПС1 соединяет выводы генератора с ЛЭП 500кВ то возможными напряжениями линий последующих ступеней будут 220 110 и т. Чем ниже напряжение сети тем большее количество линий она имеет и тем меньшая мощность передается по каждой из них.
74348. Электрические параметры режима и параметры схемы замещения. Виды режимов и их характеристика 51 KB
  Электрические параметры режима и параметры схемы замещения. Исходными данными для расчета установившихся режимов служат: схема электрического соединения и параметры сети электроэнергетической системы данные о потребителях и источниках электроэнергии. Нагрузки реальных электрических сетей при их проэктировании и эксплуатации обычно задают значениями потребляемых ими мощностей или токов ЭЭС представляется схемой замещения параметры которой обычно разделяют на продольные входящие в последовательную цепь передачи и распределения...
74349. Виды записи и составляющие полной мощности при сопряженном векторе тока. Векторные диаграммы комплексов мощности и тока 1.21 MB
  Виды записи и составляющие полной мощности при сопряженном векторе тока. Векторные диаграммы комплексов мощности и тока запись мощности при сопряженном токе Рассмотри общий случай при активноиндуктивной нагрузки источник синусоидального тока. Смещение тока относительно напряжения и определяет соотнощение между активной и реактивной составляющими мощности. Это соотношение известно как коэффициент мощности.
74350. Закон Ома для участка электрической цепи. Математическая запись. Падение и потери напряжения. Векторная диаграмма токов и напряжений 525 KB
  Падение и потери напряжения. Закон Ома для участка электрической сети: Ток на участке сети при неизменном сопротивлении пропорционален падению напряжения на участке сети. При неизменном падении напряжения ток на участке сети обратно пропорционален сопротивлению сети Математическая запись: Падение и потери напряжения: Если взять разность показаний вольтметров V1 и V2: эта разность компенсируется потерей или перепадом напряжения. эта величина называется падением напряжения Протекание электрического тока обусловлено...
74351. Характеристика и определение потерь мощности в ЛЭП напряжением 6-500 кВ. Баланс мощности ЛЭП 33.5 KB
  Баланс мощностей является следствием закона сохранения энергии и может служить критерием правильности расчета электрической цепи. а Постоянный ток Для любой цепи постоянного тока выполняется соотношение: 14 Это уравнение представляет собой математическую форму записи баланса мощностей: суммарная мощность генерируемая источниками электрической энергии равна суммарной мощности потребляемой в цепи. Из закона сохранения энергии следует что сумма всех отдаваемых активных мощностей равна сумме всех потребляемых активных мощностей т. 15В...