Функция ftmpfile

Функция freopen

Функция

#include <stdio.h>

FILE*freopen (const char*filename, const char*mode, FILE*stream)

закрывает поток, на описание которого указывает stream, а затем открывает файл, на спецификацию которого указывает ASCIIZ-строка filename. Режим открытия файла задает ASCIIZ- строка mode. Символы, формирующие режим, приведены в табл.3.1. В случае успеха функция возвращает указатель на описание открытого потока, которое будет совпадать с stream. В противном случае функция возвращает NULL. Повторное открытие того же самого файла изменяет права доступа, очищает внутренние буферы и позиционирует указатель записи-чтения либо на начало файла (r, w, r+, w+), либо на его конец (а, а+). Если файлы разные, переоткрытие приводит к переадресации файлового ввода-вывода. Эта функция обычно применяется для переадресации предоткрытых потоков stdin, stdout, stderr, stdaux, stdprn в файлы, определяемые пользователем.

Функция

#include<stdio.h>

FILE*tmpfile (void)

Создает и открывает временный файл в текущей директории текущего накопителя для потокового ввода-вывода. Файл открывается с правами “w+b”. В случае успеха функция возвращает указатель на начало описания открытого потока. В противном случае возвращается NULL. Отсутствует возможность определить имя созданного файла. После завершения программы или закрытия файла он автоматически удаляется. Функция используется тогда, когда программе необходимо временно переместить промежуточные данные на диск.

Пример тестовой программы:

/*L3_1.C*/

#include<stdio.h>

#include<process.h>

#include<errno.h>

void file_prt(FILE*);

void main(int argc, char**argv)

{ FILE*fptr;

if(argc<3)/* все ли аргументы заданы?*/

{ printf(“аНеправильно заданы аргументы. “

“Использование программы: ”

“L3_1[d:][маршрут_директория ] имя_файла”

“[.расширение] режим_открытия ”);

exit(1); }

if((fptr=fopen(argv[1], argv[2]))!=NULL)

{ file_prt(fptr); /*распечатывает поля fptr*/

fclose(fptr); } /*открытый файл закрывается*/

else perror(“aОшибка открытия файла”);

}

/*Внутренняя функция L3_1.C. Распечатывает поля переменной, описывающей открытый поток, на которую указывает fptr.*/

void file_prt(FILE*fptr)

{ printf(“ Поля переменной по шаблону FILE после открытия ”

“level=%#06x flags=%#06x fd =%#06x”

“hold=%#06x bsize=%#06x buffer=%#06x”

“curp=%#06x istemp=%#06x token=%#06x ” ,

fptr->level,fptr->flags,fptr->fd,

fptr->hold,fptr->bsize,fptr->buffer,

fptr->curp,fptr->istemp,fptr->token);

/* Вывод символического представления флагов*/

printf(“ Символическое представление флагов открытия ”

“ (Да=1, Нет=0) ”

“_F_READ %d Файл открыт для чтения ”

“_F_WRITE %d Файл открыт для записи ”

“_F_BUF %d Файл имеет выделенный динамически буфер данных ”

“_F_LBUF %d Построчно буферизуемый файл ”

“_F_ERR %d Индикатор наличия ошибки при выполнении файлового доступа ”

“_F_EOF %d Индикатор наступления условия конца файла ”

“_F_BIN %d Признак открытия файла в двоичном режиме ”

“_F_IN %d Осуществляется чтение(ввод) данных из файла ”

“_F_OUT %d Осуществляется запись(вывод) данных в файла ”

“_F_TERM %d Файл является терминалом ”,

fptr->flags&_F_READ,( fptr->flags&_F_WRIT)>>1,

(fptr->flags&_F_BUF)>>2,( fptr->flags&_F_LBUF)>>3,

(fptr->flags&_F_ERR)>>4,( fptr->flags&_F_EOF)>>5,

(fptr->flags&_F_BIN)>>6,( fptr->flags&_F_IN)>>7,

(fptr->flags&_F_OUT)>>8,( fptr->flags&_F_TERM)>>9);

}