Функция fdopen

Функция

#include<stdio.h>

FILE * fdopen(int handle, char * type);

связывает поток с дескриптором, полученным функциями creat, dup, dup2 или open. Тип потока должен совпадать с режимом, в котором был открыт handle(см. таблицу 1).

При успешном завершении fdopen возвращает значение заново открытый поток stream. В случае ошибки, функция возвращают ноль (NULL).

Пример:

#include<sys\stat.h>

#include <stdio.h>

#include <fcntl.h>

#include<io.h>

int main(void)

{

int handle;

FILE *stream;

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

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

/* теперь преобразуем его в поток */

stream = fdopen(handle, "w");

if (stream == NULL)

printf("Ошибка fdopen\n");

else {

fprintf(stream, "Hello, world\n");

fclose(stream);

}

return 0;

}

Функция eof

Функция

#include<io.h>

int eof(int handle);

определяет, достигнут ли конец файла, связанного с дескриптором handle.

Если текущая позиция является концом файла, функция eof возвращает значение 1; в противном случае значение 0. При возникновении ошибки возвращается значение -1, и глобальная переменная errno получает значение: EBADF - Неверный номер файла.

Пример:

#include<process.h>

#include<string.h>

#include<stdio.h>

#include<io.h>

int main(void)

{

FILE *temp_file;

int handle;

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

char ch;

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

if((temp_file=tmpfile()) == NULL)

{

perror("Открытие файла:");

exit(1);

}

/* получить дескриптор данного файла */

handle = fileno(temp_file);

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

write(handle,msg,strlen(msg));

/* переместить указатель в начало файла */

lseek(handle,0l,SEEK_SET);

/* считывать данные до появления конца файла */

do

{

read(handle,&ch,1);

printf("%c",ch);

} while(!eof(handle);

/* закрыть временный файл */

fclose(temp_file);

return 0;

}

Функция ferror

Функция

#include<stdio.h>

int ferror(FILE * stream);

является макрокомандой, которая проверяет данный поток stream на ошибочную операцию записи или чтения. Если установлен признак ошибки потока stream, он сохраняет его до вызова функций clearerr или rewind или до момента закрытия потока.

Функция ferror возвращает ненулевое значение, если в потоке stream была обнаружена ошибка.

Пример:

#include <stdio.h>

int main(void)

{

FILE *stream;

char ch;

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

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

/* справоцировать ошибку */

ch = fgetc(stream);

/* конец файла? */

if(ferror(stream))

{

/* вывести сообщение об ошибке */

printf("Ошибка чтения\n");

/* сбросить признак ошибки */

clearerr(stream);

}

fclose(stream);

return 0;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: