Russian Belarusian English German Japanese Ukrainian

Rashka.studio - игры и приложения для Android! Заходи, ждём тебя =)

Setvbuf

CuBook05

Функция

Назначает буфер для потока stream.
 
Синтаксис

#include <stdio.h>
void setvbuf(FILE *stream, char *buf, int type, size_t size);
 
Прототип

stdio.h
 
Описание

Функция setvbuf выделяет буфер buf для использования в операциях ввода/вывода - вместо автоматически выделяемого буфера. Они вызываются только после того, как данный поток stream будет открыт.

При вызове функции setvbuf, если параметр buf = NULL, буфер будет выделен посредством malloc; параметр size будет определять объем выделенной памяти. Параметр size определяет размер буфера и должен быть больше нуля.

Замечание. Параметр size не должен превышать 32767.

Стандартный ввод и вывод stdin и stdout не используют буферов, если они не были переназначены; в противном случае, ввод и вывод производиться с буферизацией. Unbuffered (небуферизованный ввод/вывод) означает, что символы, записываемые в поток, поступают непосредственно в файл или на устройство; в то время как buffered (буферизованный ввод/вывод) означает, что символы накапливаются и затем записываются, как блок.

Параметр type имеет одно из следующих значений:

_IOFBF Файл использует буферы полностью (fully buffered). Если буфер пуст, следующая операция ввода пытается заполнить буфер. Перед тем, как данные записываются в файл, выводной буфер должен полностью заполниться.
_IOLBF Файл использует буферы построчно (line buffered). Когда буфер пуст, следующая операция ввода пытается его заполнить. Тем не менее, при выводе буфер будет сброшен, как только в файл будет записан символ перехода на новую строку.
_IONBF Файл не использует буферов (unbuffered). Параметры buf и size игнорируются. Каждая операция ввода будет считывать данные непосредственно из файла, и каждая операция вывода будет записывать данные непосредственно в файл.

Наиболее распространенной причиной ошибки является размещение буфера, в качестве automatiс (локальной) переменной и затем попытка закрыть файл до выхода из функции, в которой был объявлен буфер.
 
Возвращаемое значение

Функция setvbuf при успешном завершении возвращает 0. Не нуль она возвращает, если параметры type или size имеют неверные значения; или если для размещения буфера нехватает памяти.
 
Переносимость

Функция поддерживаются на системах UNIX и стандартом ANSI C.
 
Пример

#include <stdio.h>

int main(void)
{
FILE *input, *output;
char bufr[512];
input = fopen("file.in", "r");
output = fopen("file.out", "w");
if (setvbuf(input, bufp,_IOLBF, 512) != 0)
printf("Ошибка, при определении буфера для входного файла\n");
else
printf("Буфер определен\n");
if (setvbuf(output, NULL,_IOLBF, 132) != 0)
printf("Ошибка, при определении буфера для выходного файла\n");
else
printf("Буфер определен\n");
fclose(input);
fclose(output);
return 0;
}
Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter

  Комментарии

0 Smithd426 24.04.2014 18:51 #1
This web site really has all the information and facts I wanted about this subject and didn't know who to ask.

Добавить комментарий


Защитный код Обновить