Константы, задающие начало отсчета

Константа Значение Описание
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; просмотров: 669;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.01 сек.