22939

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

Лекция

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

Перед тим як розпочати роботу з потоком його необхідно відкрити за допомогою функції FILE fopenchar filename char mode. Функція формує потік з даним файлом і повертає результат у вигляді покажчика на обєкт типу FILE який містить всю інформацію необхідну для роботи з потоком адресу та розмір буфера індексзсув поточної позиції в буфері режим оборобки інформації і т. FILE fp; fp=fopen€œfile1.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);    

                 

}


 

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

29269. КУЛЬТУРОГЕНЕЗ 27.5 KB
  Сущность культурогенеза заключается в процессе постоянного самообновления культуры не только методом трансформационной изменчивости уже существующих форм и систем но и путем возникновения новых феноменов не существовавших в культуре ранее. Культурогенез не является однократным событием происхождения культуры в эпоху первобытной древности человечества но есть процесс постоянного порождения новых культурных форм и систем. С позиций эволюционной теории основной причиной культурогенеза является необходимость в адаптации человеческих сообществ к...
29270. КУЛЬТУРОЛОГИЯ. Философия культуры 29.5 KB
  Предметом культурологии. Многие теоретические исследования выполняются на стыке философии культуры и культурологии. Прежде всего имеет место разделение культурологии. В фундаментальной культурологии могут быть выделены социальная антропология культурная антропология историческая культурология психологическая антропология культурная семантика и др.
29271. Древнеегипетская, античная, библейская, славянская, восточно-азиатская мифологические системы 59 KB
  Пантеон система всех богов египетских божеств включает несколько исторических пластов. Наиболее древние боги имели тождество с животными: Гор сокол Ра с головой сокола Сехмет львица Анубис шакал и т. Одним из главных богов в Древнем Египте считался Осирис. Египтяне в честь бога совершали ежегодный обряд: сделанное из глины изображение Осириса засевалось зерном и к празднику покрывалось зелеными всходами.
29272. Миф как универсальная культурно-историческая форма 51.5 KB
  Мифы создания коллективной общенародной фантазии обобщённо отражающие действительность в виде чувственноконкретных персонификаций и одушевлённых существ которые мыслятся первобытным сознанием реальными С. В первобытной культуре мифы выполняли роль науки это целостная система в терминах которой воспринимается весь мир. Этиологические мифы от греч. причина мифы объяснительные мифы повествования в которых в мифологически олицетворённой форме разъясняются происхождение какоголибо явления природы или социальной жизни.