- •Лекция №8
- •9. Файлы
- •9.1. Работа с файлами в языке с Открытие и закрытие файла
- •Функция fclose
- •Функция fcloseall
- •Функция feof
- •Функция fscanf
- •Функция freopen
- •Функция ftmpfile
- •Функция fdopen
- •Функция eof
- •Функция fgetpos
- •Функция fileno
- •Функция flushall
- •Функция dup
- •Функция dup2
- •Функции ввода-вывода
- •Функция fgetc
- •Функция getc
- •Функция ungetc
- •Функция fputs
- •Функция fread
- •Функция fwrite
- •Функция fseek
- •Функция fsetpos
- •Функция fstat
- •Функция ftell
- •Открытие и закрытие файлов
- •Класс istream
- •Функции get, getline и read
- •Функция возвращения
- •Позиционирование потока
- •Класс ostream
- •Функции вывода put и write
- •Функции класса filebuf
- •Функции класса streambuf
- •Функции класса strstreambuf
- •Определение состояния потока
Функция fgetpos
Функция
#include<stdio.h>
int fgetpos(FILE * stream, fpos_t *pos);
сохраняет позицию указателя файла, связанного с потоком stream, в месте, указываемом pos.
Тип fpos_t описывается следующим образом:
typedef long fpos_t;
При успешном завершении fgetpos возвращает 0. При ошибке возвращает ненулевое значение и устанавливает errno в EBADF или EINVAL.
Пример:
#include<string.h>
#include<stdio.h>
int main(void)
{
FILE *stream;
char string[] = "Тестовый пример";
fpos_t filepos;
/* создать файл для его изменения */
stream = fopen("DUMMY.FIL","w+");
/* записать в файл данные */
fwrite(string,strlen(string),1,stream);
/* сообщить положение указателя */
fgetpos(stream,&filepos);
printf("Указатель находится в %ld позиции\n");
fclose(stream);
return 0;
}
Функция fgets
Функция
#include<stdio.h>
char * fgets(char s, int n, FILE *stream);
считывает из потока stream строку символов и помещает ее в s. Ввод завершается после ввода n-1 символа или при вводе символа перехода на следующую строку, смотря что произойдет раньше. В отличие от gets, fgets прекращает ввод строки при получении символа перехода на следующую строку.
Нулевой байт добавляется в конец строки для индикации ее конца.
При успешном завершении возвращает указатель на s, при ошибке или конце файла возвращает NULL.
Пример:
#include<string.h>
#include<stdio.h>
int main(void)
{
FILE *stream;
char string[] = "Тестовый пример";
char msg[20];
/* создать файл для его изменения */
stream = fopen("DUMMY.FIL","w+");
/* записать в файл данные */
fwrite(string,strlen(string),1,stream);
/* перейти в начало файла */
fseek(stream,0,SEEK_SET);
/* ввести строку из файла */
fgets(msg,strlen(string)+1,stream);
/* напечатать строку */
printf("%s",msg);
fclose(stream);
return 0;
}
Функция filelength
Функция
#include<io.h>
long filelength(int handle);
возвращает длину в байтах файла, соответствующего дескриптору handle.
При успешном завершении функция filelength возвращает значение типа long- длину файла в байтах. При ошибке функция возвращает значение -1L, и глобальной переменной errno присваивается: EBADF - Неверный номер файла.
Пример:
#include<stdio.h>
#include<io.h>
#include<fcntl.h>
#include<sys\stat.h>
#include<string.h>
int main(void)
{
int handle;
char buf[11] = "0123456789";
/* создать файл из 10 байт */
handle = open("DUMMY.FIL",O_RDWR|O_CREAT|O_TRUNC,S_IREAD|S_IWRITE);
write(handle,buf,strlen(buf));
/* напечатать размер файла */
printf("Размер файла в байтах : %ld\n",filelength(handle));
/* закрыть файл */
close(handle);
return 0;
}
Функция fileno
Функция
#include<stdio.h>
int fileno(FILE * stream);
представляет собой макрокоманду, которая возвращает логический номер файла для заданного потока stream. Если поток stream имеет более одного номера, функция fileno возвращает номер, назначенный данному потоку при первом открытии.
Функция fileno возвращает целое число, обозначающее значение дескриптор файла, соответствующий потоку stream.
Пример:
#include<stdio.h>
int main(void)
{
FILE *stream;
int handle;
/* создать файл */
stream = fopen("DUMMY.FIL","w");
/* получить дескриптор файла */
handle = fileno(stream);
/* напечатать его */
printf("Дескриптор файла = %d\n",handle);
/* закрыть файл */
fclose(stream);
return 0;
}
