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);    

                 

}


 

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

78897. Взаимодействие традиций и возникновение нового знания 27.5 KB
  Кун впервые рассмотрел традиции как основной конституирующий фактор развития науки. Он обосновал казалось бы противоречивый феномен: традиции являются условием возможности научного развития. традиции. Из истории науки известно что происходит смена традиции возникновение новых парадигм т.
78898. Научные революции как точки бифуркации в развитии знания 25.5 KB
  Главным условием появления идеи научных революций явилось признание историчности разума а следовательно историчности научного знания и соответствующего ему типа рациональности. представление о внеисторичности разума было поставлено под сомнение. Это в первую очередь означает историчность разума с помощью которого осуществляется процесс познания. Принцип историзма разума получил дальнейшее развитие в марксизме неогегельянстве неокантианстве философии жизни.
78899. Глобальные революции и типы научной рациональности 31 KB
  Глобальные революции и типы научной рациональности. В ходе этой революции сформировался особый тип рациональности получивший название научного. Научный тип рациональности радикально отличаясь от античного тем не менее воспроизвел правда в измененном виде два главных основания античной рациональности: вопервых принцип тождества мышления и бытия вовторых идеальный план работы мысли. Тип рациональности сложившийся в науке невозможно реконструировать не учитывая тех изменений которые произошли в философском понимании тождества...
78900. Главные характеристики современной постнеклассической науки 28.5 KB
  Главные характеристики современной постнеклассической науки. Внедрение времени во все науки все более широкое распространение идеи развития историзация диалектизация науки. В современной методологической литературе все более склоняются к выводу о том что если объектом классической науки были простые системы а объектом неклассической науки сложные системы то в настоящее время внимание ученых все больше привлекают исторически развивающиеся системы которые с течением времени формируют все новые уровни своей организации. Эта...
78901. Глобальный эволюционизм 29 KB
  Концепция глобального эволюционизма оформилась в 80е гг. Наряду со стремлением к объединению представлений о живой и неживой природе социальной жизни и технике одной из целей глобального эволюционизма явилось стремление интегрировать естественнонаучное обществоведческое гуманитарное а также техническое знание. В этом своем качестве концепция глобального эволюционизма претендует на создание нового типа целостного знания сочетающего в себе научнометодологические и философские основания. Обоснованию глобального эволюционизма...
78903. Постнеклассическая наука и изменение мировоззренческих установок техногенной цивилизации 33.5 KB
  В техногенных обществах основной ценностью являются инновация и новизна внутренними резервами развития становится дальнейший технологический прогресс. Культурная матрица техногенного развития проходит прединдустриальную индустриальную постиндустриальную стадии. Негативы современного технократического развития многообразны: это и угроза ядерной и экологической катастроф радиоактивное заражение биосферы генетические мутации генная инженерия и клонирование зомбирования нейролептонного характера сциентизированное мировоззрение....
78904. Роль науки в преодолении глобальных кризисов 30 KB
  Ученые во всеуслышание заявляют о глобальных проблемах современности к которым относят проблемы охватывающие систему мир человек в целом и которые отражают жизненно важные факторы человеческого существования. Глобальные проблемы имеют не локальный а всеохватывающий планетарный характер. К глобальным проблемам современности относят экологические демографические проблемы войны и мира проблемы кризиса культуры. В силу этого глобальные проблемы должны решаться комплексно координированно усилиями всего мирового сообщества.
78905. Наука как социальный институт 28.5 KB
  Наука как социальный институт. Наука как социальный институт возникла в Западной Европе в XVI XVII вв. Наука как социальный институт включала в себя не только систему знаний и научную деятельность но и систему отношений в науке научные учреждения и организации. Институт это явление надындивидуального уровня его нормы и ценности довлеют над действующими в его рамках индивидами.