Студопедия

Главная страница Случайная страница

КАТЕГОРИИ:

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Позиционирование в файле




...

 

8.4.2.1 Функции получения текущего положения указателя потока ftell и fgetpos

 

Прототип функции ftell (из <stdio.h>):

long int ftell(File *f);

Функция ftell возвращает текущую позицию в файле, связанном с потоком f, как длинное целое. В случае ошибки возвращает число (-1).

 

Прототип функции fgetpos (из <stdio.h>):

long int fgetpos (File *f, fpos_t *pos);

Функция fgetpos возвращает текущую позицию в файле, связанном с потоком f, и копирует значение текущей позиции по адресу pos. Это значение позднее может использоваться функцией fsetpos. Возвращаемое значение имеет тип fpos_t, который используется функциями fgetpos и fsetpos для хранения текущей позиции файла:

typedef long fpos_t;

 

8.4.2.2 Функции задания положения указателя fseek и fsetpos, rewind

 

Прототип функции fseek :

int fseek (File *f, long off, int org);

Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию off, отсчитываемую от значения org, которое должно быть равно одной из констант, определенных в <stdio.h>:

SEEK_CUR – от текущей позиции указателя (1);

SEEK_END – от конца файла (2);

SEEK_SET - от начала файла (0).

Параметр off задает количество байтов, на которое необходимо сместить указатель соответственно параметру org. Величина смещения может быть как положительной, так и отрицательной, но нельзя сместиться за пределы начала файла.

Такой доступ к данным в файле называется произвольным.

 

Прототип функции fsetpos :

int fsetpos (File *f, const fpos_t *pos);

Функция перемещает текущую позицию в файле, связанном с потоком f, на позицию *pos, предварительно полученную с помощью функции fgetpos.

Примечание. Функции fseek и fsetpos нельзя использовать для стандартных потоков.

 

Функция rewind очищает флаги ошибок при работе с потоками и устанавливает указатель на начало файла. Ее прототип:

void rewind( File *f );

 

 

8.4.3 Функции чтения и записи потока байтов fread и fwrite

 

Прототип функции fread:

 

size_t fread (void *buffer, size_t size, size_t count, FILE *stream);

 

Функция fread считывает count элементов длиной size байтов в область, заданную указателем buffer, из потока stream. Возвращает количество прочитанных элементов, которое может быть меньше count, если при чтении произошла ошибка или встретился конец файла.

 

Прототип функции fwrite:

size_t fwrite (const void *p, size_t size, size_t n, FILE *f);

Функция записывает n элементов длиной size байтов из буфера, заданного указателем p, в поток f. Возвращает число записанных элементов.


...

Примеры.

1. Записать в бинарный файл целочисленный массив из n элементов.

Пусть описан массив А следующим образом:

int A[100];

Запишем в бинарный файл f первые n элементов этого массива:

fwrite (A, sizeoff(int), n, f);

Файл f может иметь описание:

FILE*f=fopen(“b1.dat”, “wb”);

 

2. Записать в бинарный файл массив записей.

struct train

{ int ntrain;

char s[50];

char v1[5];

char v2[5];

}t[20];

FILE*f=fopen(“b2.dat”, “wb”);

fwrite (t, sizeoff(struct train), n, f);

 

3.Прочитать из бинарного файла третий элент массива t.

fseek (f, 2* sizeoff(struct train), 0);

struct train g;

fread (g, sizeoff(struct train), 1, f);

printf(“Номер третьего поезда:%d\n”, g.ntrain);

 

8.4.4 Функции чтения символа из потока (getc, fgetс, getchar)

 

Функция getc, имеющая прототип:

int getc (FILE *f);

возвращает очередной символ в формате int из стандартного потока f. Если символ не может быть прочитан, то возвращает значение EOF.

 

Функция fgetс, имеющая прототип:

int fgetc (FILE *f);

возвращает очередной символ в формате int из потока f. Если символ не может быть прочитан, то возвращает значение EOF.

 

Функция getchar, имеющая прототип:

int getchar (void);

возвращает очередной символ в формате int из стандартного потока (stdin). Если символ не может быть прочитан, то возвращает значение EOF.

 

8.4.5 Функции записи символа в поток (putc, fputc, putchar)

 

Функция putc записывает символ ch в поток f. При ошибке возвращает значение EOF. Ее прототип:

int putc (int ch, FILE *f);

Выполняется fputc аналогично функции putc.

Ее прототип:

 

int fputc (int ch, FILE *f);

Функция putchar() выводит символ ch на стандартное устройство вывода, добавляя в конце символ новой строки. Возвращает неотрицательное значение при успехе или EOF – при ошибке.

 

8.4.6 Функции чтения строки из потока (fgets, gets)

 

Прототип функции fgets:

char *fgets (char *s, int n, FILE *f);

Функция читает не более n-1 байт из потока f и помещает прочитанные байты в строку s, прекращая чтение при обнаружении символа новой строки или конца файла. Символ новой ('\n') строки при чтении не отбрасывается, помещается в конец строки s. Прочитанная строка дополняется ограничителем строки ('\0'). При обнаружении ошибки или конца файла возвращает NULL, в противном случае – указатель на строку s.


...

Функция gets читает символы с клавиатуры до появления символа новой строки и помещает их в строку s. Сам символ новой строки в строку не включается. Возвращает указатель на char.

Прототип функции gets:

char *gets (char *s);

 

8.4.7 Функции записи строки в поток (fputs, puts)

 

Прототип функции fputs:

int fputs (const char * s, FILE *f);

Функция fputs записывает строку символов s в поток f. Символ конца строки в файл не записывается. При ошибке возвращает значение EOF, иначе – неотрицательное число.

Функция puts выводит строку s на стандартное устройство вывода, добавляя в конце символ новой строки. Возвращает неотрицательное значение при успехе или EOF – при ошибке.

Прототип функции puts:

int puts (char *s);

 

8.4.8 Функции форматированного ввода (чтения) из потока (fscanf , scanf, sscanf)

 

Прототип функции fscanf:

intfscanf (FILE *f, const char *fmt [, par1, par2, …]);

Эта функция вводит (читает) строку параметров par1, par2, … в формате, определенном строкой fmt, из потока (файла) f. Возвращает число переменных, которым присвоено значение.

 

Прототип функции scanf:

intscanf (const char *fmt [, par1, par2, …]);

Функция scanf вводит (читает) строку параметров par1, par2, … в формате, определенном строкой fmt, со стандартного устройства ввода (обычно с клавиатуры (stdin)). Возвращает число переменных, которым присвоено значение.

 

Прототип функции sscanf:

intsscanf (const char *buf, const char *fmt [, par1, par2, …]);

Функция sscanf вводит данные аналогично функции scanf, но не с клавиатуры, а из строки символов, переданной ей первым параметром. Аргумент buf – строка символов, из которой вводятся значения, fmt - строка формата, в соответствии с которой происходит преобразование данных. Многоточие указывает на наличие необязательных аргументов, соответствующих адресам вводимых значений.

 

8.4.9 Функции форматированного вывода в поток (fprintf, printf, sprintf)

 

Прототип функции fprintf:

int fprintf (FILE *f, const char *fmt, );

Функция записывает в поток f значения переменных, список которых обозначен многоточием (), в формате, указанном строкой fmt. Возвращает число записанных значений.

 

Прототип функции printf:

int printf (const char *fmt, );

Функция выводит на стандартное устройство вывода (stdout) значенияпеременных, перечисленных в списке, обозначенном многоточием (), в формате, определенном строкой fmt. Возвращает число выведенных значений.

 

Прототип функции sprintf:

int sprintf (char *buf, const char *fmt, );

Функция выводит в строку buf значения переменных, перечисленных в списке, обозначенном многоточием (), в формате, определенном строкой fmt.

Примечание. Спецификации формата fmt были рассмотрены в разделе "Консольный ввод-вывод".

 

...

...

mylektsii.ru - Мои Лекции - 2015-2019 год. (0.01 сек.)Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав Пожаловаться на материал