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

                 

}


 

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

82191. Ми роду козацького діти, землі української цвіт 4.39 MB
  Розширити знання учнів про славне минуле українського народу, ознайоми ти з одним із відомих гетьманів України І.Мазепою, боротьбою українсько го народу за волю, незалежність, віру і щастя, виховувати любов до Украї ни, інтерес до історичного минулого, почуття національної свідомості та громадянської активності.
82192. Алкоголь — ворог №1 24.5 KB
  Ворога потрібно знати в обличчя: а вплив алкоголю на стравохід; б дія алкоголю на шлунок; в вплив алкоголю на кишківник; г вплив алкоголю на печінку; д вплив алкоголю на кров; е вплив алкоголю на серце; є вплив алкоголю на підшлункову залозу; ж вплив алкоголю на мозок.
82193. Сучасні українці — жертви алкогольної реклами 2.99 MB
  Текст вірша: Всі ті, хто за тверезу Україну Підняти хочуть Україну із руїни. Що не дає тобі цвісти, Вкраїно-ненько? Ой, страшний є у мене, лютий вороженько. Найбільша цінність наша — хто? Це наші діти. Їх, молодих, найбільше хоче він споїти. Ой, як голівоньку їм нелюди морочать: Позбавить розуму всю нашу молодь хочуть!
82194. Олимпийский урок 53.5 KB
  Познакомить с историей Олимпийских игр. Чего вы ожидаете от предстоящих зимних Олимпийских игр в России К нам приедет много гостей построят спортивные комплексы. Последние зимние Олимпийские игры прошли в Италии в городе Турине в 2006 г. XXII летние Олимпийские игры состоялись в Москве в1980 г.
82195. Осінь-чарівниця 891.5 KB
  Мета: учити дітей бачити зміни природи восени, виховувати у дітей естетичних почуття, любов до природи рідного краю, уміння розуміти її красу, уловлювати настрій, викликаний картинами природи; розширити кругозір дітей, сприяти розвитку інтересу до явищ природи та її загадок.
82196. Великие реформы 60 -70-х гг. XlX века 49.38 KB
  Начиная эту реформу правительство Александра ll надеялось провести модернизацию общества которая была так важна России в этот период. Однако отмена крепостного права не могла пройти бесследно для России так как господствовал крепостной строй. должны были способствовать ускорению или торможению модернизации России...
82197. Потребление. Потребитель. Права потребителей и их защита 51.95 KB
  Словарь урока: потребитель продавец недостаток товара материальный ущерб моральный вред гарантийный срок срок годности срок службы товара. Право на информацию о товарах услугах работах. Она нужна чтобы потребитель смог сделать правильный выбор для этого ему нужно знать качества и свойства того или иного товара.
82198. Реки России 104.5 KB
  Цель урока: Изучить особенности рек России. Расширить и углубить знания о реках. Сформировать понятия базис эрозии, уклон, падение реки, расход воды в реке, годовой сток, твёрдый сток. Показать влияние климата и рельефа на реки. Формировать умение определения уклона и падения реки.
82199. Люди Средневековья. Рыцари 51.5 KB
  Ожидаемые результаты: в ходе урока учащиеся смогут: описывать жилище и снаряжение рыцаря, «рыцарский турнир»; называть термин по описанию явления; определять личностные качества и идеалы рыцаря на основе анализа рыцарских девизов и фрагментов литературных произведений.