Константы, задающие начало отсчета
Константа | Значение | Описание |
SEEK_SET | начало файла | |
SEEK_CUR | текущая позиция | |
SEEK_END | конец файла |
Функция возвращает 0, если перемещение в потоке выполнено успешно, иначе возвращает ненулевое значение.
Например:
fseek(f,0L,SEEK_SET);
//перемещение к началу потока из текущей позиции
fseek(f,0L,SEEK_END);
//перемещение к концу потока из текущей позиции
fseek(f,-(long)sizeof(a),SEEK_SET);
//перемещение назад на длину переменной а
Кроме этой функции, для прямого доступа к файлу используются функции:
long tell(FILE *f);
//получает значение указателя текущей позиции в потоке
void rewind(FILE *f);
//устанавливает значение указателя на начало потока
Пример 1.
#include <fcntl.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <io.h>
#include <stdlib.h>
void main () {
int fh1, fh2;
//открытие файла на нижнем уровне
fh1 = open("data1.dat", O_RDONLY);
//проверка корректности открытия файла
if (fh1 == -1)
perror("open failed on input file");
fh2 = open("data2.dat", O_WRONLY|O_TRUNC|O_CREAT,
S_IREAD|S_IWRITE);
if (fh2 == -1)
perror("open failed on output file");
}
Пример 2.
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <conio.h>
#include <io.h>
void main( ){
FILE *f;//указатель на двоичный файл
int i,n=10;
char s[]="String";
float r;
f=open("file_bin","wb");
//создание двоичного файла для записи
for(i=1;i<=n;i++) {
r=pow(i,1.0/3);
fwrite(s,sizeof(s),1,f);
//запись строки String в файл
fwrite(&i,sizeof(int),1,f);
//запись целого числа (номера строки) в файл
fwrite(&r,sizeof(float),1,f);
//запись вещественного числа (корня кубического) в файл
printf("\n%s %d %f",s,i,r);
//контрольный вывод на экран
}
close(f);//закрытие файла
printf("\n");
f=open("file_bin","rb");
//открытие двоичного файла для чтения
for(i=n; i>0; i--) {//перемещение указателя файла
fseek(f,(i-1)*(sizeof(s)+sizeof(int)+sizeof(float)),
SEEK_SET);
fread(&s,sizeof(s),1,f);//чтение строки
fread(&n,sizeof(int),1,f);//чтение целого числа
fread(&r,sizeof(float),1,f);
//чтение вещественного числа
printf("\n%s %d %f",s,n,r);
//вывод на экран содержимого файла
}
}
Задания
1.Наберите код программы из Примера 1. Выполните компиляцию и запуск программы.
2.Составьте программу, копирующую содержимое данного файла побайтно в другой файл.
3.Составьте программу, определяющую размер файла в байтах с использованием функций прямого досупа.
Домашние задания
1.Наберите код программы из Примера 2. Выполните компиляцию и запуск программы.
2.Составьте программу, копирующую содержимое данного файла побайтно в обратном порядке.
3.Составьте программу, которая выводит свой текст на экран. Используйте работу с файлами на нижнем уровне.
Дата добавления: 2015-02-16; просмотров: 720;