Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Л8.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
275.46 Кб
Скачать

Функция flushall

Функция

#include<stdio.h>

int flushall(void);

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

Функция flushall возвращает число открытых входных и выходных потоков.

Пример:

#include<stdio.h>

int main(void)

{

FILE *stream;

/* создать файл */

stream = fopen("DUMMY.FIL","w");

/* сбросить все открытые потоки */

printf("Сброшено %d потоков\n",flushall());

/* закрыть файл */

fclose(stream);

return 0;

}

Функция dup

Функция

#include<io.h>

int dup(int handle);

возвращает дескриптор файла, который по следующим позициям совпадает с оригинальным дескриптором:

- тот же самый открываемый файл или устройство;

- тот же самый адресный указатель файла (то есть изменение одного адресного указателя приводит к изменению другого);

-тот же самый метод доступа (чтение, запись, чтение/запись).

Переменная handle получают значения при вызове функций creat,_creat,_open, open, dup, dup2.

При успешном завершении функция dup возвращает целое неотрицательное число, обозначающее соответствующий дескриптор файла; в противном случае функция dup возвращает значение -1.

При возникновении ошибки глобальная переменная errno получает одно из следующих значений:

EMFILE - Слишком много открытых файлов.

EBADF - Неверный номер файла.

Пример:

#include<string.h>

#include<stdio.h>

#include<conio.h>

#include<io.h>

void flash(FILE *stream);

int main(void)

{

FILE *fp;

char msg[] = "Тестовый пример";

/* создание файла */

fp = fopen("DUMMY.FIL,"w");

if(fp)

{

/* записать в файл данные */

fwrite(msg,strlen(msg),1,fp);

clrscr();

printf(" Для сброса буферов файла на диск нажмите клавишу ");

getch();

/* Сброс буферов файда на диск без его закрытия */

flush(fp);

printf("Буфера записаны, для завершения нажмите клавишу.");

getch();

}

else

{

printf("Ошибка при открытии файла\n");

}

return 0;

}

void flash(FILE *stream)

{

int duphandle;

/* сброс внутреннего буфера TC */

fflash(stream);

/* сдублировать дескриптор файла */

duphandle = dup(fileno(stream));

/* закрыть второй дескриптор, для сброса внутренних буферов DOS */

close(duphandle);

}

Функция dup2

Функция

#include<io.h>

int dup2(int oldhandle, int newhandle);

возвращают дескриптор файла, который по следующим позициям совпадает с оригинальным дескриптором:

- тот же самый открываемый файл или устройство;

- тот же самый адресный указатель файла (то есть изменение одного адресного указателя приводит к изменению другого);

-тот же самый метод доступа (чтение, запись, чтение/запись).

dup2 создает новый дескриптор со значением newhandle Если файл связанный с дескриптором newhandle открыт, то при вызове dup2 он закрывается.

Переменная newhandle и oldhandle - это дескрипторы файлов, и получают значения при вызове функций creat,_creat,_open, open, dup, dup2.

При успешном завершении функция dup2 возвращает 0, значение в противном случае функция dup2 возвращает значение -1.

При возникновении ошибки глобальная переменная errno получает одно из следующих значений:

EMFILE - Слишком много открытых файлов.

EBADF - Неверный номер файла.

Пример:

#include<sys\stat.h>

#include<string.h>

#include<fcntl.h>

#include<io.h>

#include<stdio.h>

#define STDOUT 1

int main(void)

{

int fptr,oldstdout;

char msg[] = "Тестовый пример";

/* создание файла */

fptr = open("DUMMY.FIL",O_CREAT|O_RDWR,S_IREAD|S_IWRITE);

if(fptr)

{

/* создать дополнительный дескриптор для stdout */

oldstdout = dup(STDOUT);

/* перенаправить стандартный вывод в файл, путем

дублирования его дескриптора */

dup2(fptr,STDOUT);

/* закрыть файл */

close(fptr);

/* было перенаправлено в DUMMY.FIL */

write(STDOUT,msg,strlen(msg));

/* восстановить исходный дескриптор stdout */

dup2(oldstdout,STDOUT);

/* закрыть второй дескриптор stdout */

close(oldstdout);

}

else

{

printf("Ошибка при открытии файла. \n");

}

return 0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]