_fdopen, _wfdopen
Поток связывает с файлом, который ранее был открыт для ввода-вывода низкого уровня.
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Параметры
fd
Дескриптор файла открытого файла.mode
Тип доступа к файлу.
Возвращаемое значение
Каждая из этих функций возвращает указатель на открытии потока.Значение указателя null указывает на ошибку.При возникновении ошибки вызывается обработчик недопустимого параметра, как описано в разделе Проверка параметров.Если выполнение может продолжить работу, errno устанавливается либо EBADF, указывает на неверный дескриптор, или EINVAL, указывает, что mode был указатель null.
Дополнительные сведения об этих и других кодов ошибок см. _doserrno, errno, _sys_errlist и _sys_nerr.
Заметки
_fdopen Функция связывает поток ввода-вывода с файлом, который идентифицируется по fdи таким образом файл, который открыт для вывода низкого уровня в буфер и отформатирован._wfdopenМногобайтовая знаковая версия _fdopen; mode аргумент _wfdopen — строка двухбайтовых знаков._wfdopenи _fdopen в противном случае ведут себя одинаково.
Универсальные текстовые сопоставления подпрограммы
Подпрограммы в файле Tchar.h |
_UNICODE и _MBCS не определен |
Определен символ _MBCS |
Определенные _UNICODE |
---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
mode Символьная строка определяет тип файла и доступ к файлам.
Строка символов mode указывает тип доступа для файлов, как показано в следующей таблице.
"r"
Открывает для чтения.Если файл не существует или не удается найти fopen вызов завершается с ошибкой."w"
Откроется пустой файл для записи.Если данный файл существует, ее содержимое удаляются."a"
Открывает для записи в конец файла (добавления).Создает файл, если он не существует."r+"
Открывает для чтения и записи.(Файл должен существовать)."w+"
Откроется пустой файл для чтения и записи.Если данный файл существует, ее содержимое удаляются."a+"
Открывает для чтения и добавления.Создает файл, если он не существует.
При открытии файла с "a" или "a+" доступ к типу, все записи операции выполняются в конце файла.Указатель на файл можно перемещать с помощью fseek или rewind, но он всегда перемещается обратно в конец файла перед любую запись, выбранная операция.Таким образом Невозможно перезаписать существующие данные.При "r+", "w+", или "a+" указан тип доступа, разрешенные чтения и записи (файл считается открытым для «обновление»).Однако при переходе от чтения и записи должно быть вмешательства fflush, fsetpos, fseek, или rewind операции.Можно задать текущую позицию для fsetpos или fseek операции, если требуется.
В дополнение к выше значения, следующие символы также могут быть включены в mode для указания режима преобразования символов новой строки.
t
Откройте в текстовом (перевести) режиме.В этом режиме каретки сочетания каналов возврат строки (CR-LF) преобразуются в каналы одной строки (LF) на входе и символы LF, преобразуются в комбинации символов CR-LF на выходе.Кроме того Ctrl + Z, интерпретируется как символ конца файла на входе.В файлах, открытых для чтения/записи fopen проверяет Ctrl + Z в конце файла и удаляет его, если это возможно.Это делается потому, что с помощью fseek и ftell функции для перемещения внутри файла, который заканчивается Ctrl + Z может привести к fseek работать неправильно в конце файла.b
Открытие в двоичном режиме (непереведенные).Любые переводы из t режиме, подавляются.c
Включить флаг фиксации для связанных filename таким образом, чтобы содержимое файла буфера записывается непосредственно на диск, если fflush или _flushall называется.n
Сбросить флаг фиксации для связанных filename на «нет commit». Это значение по умолчанию.Он также переопределяет фиксации глобальный флаг, если связь программы с помощью Commode.obj.По умолчанию флаг глобальной фиксации «нет commit» пока явное связывание программы с помощью Commode.obj.
The t, c, and nmode options are Microsoft extensions for fopen and _fdopen.Не используйте их, если вы хотите сохранить мобильность ANSI.
Если t или b не указан mode, режим преобразования по умолчанию определяется как глобальная переменная _fmode.Если t или b префиксом аргумента функции и возвращает NULL.Обсуждение текст и двоичные режимы просмотра текста и двоичный режим файлового ввода -вывода.
Допустимые символы для mode строку, используемую в fopen и _fdopen соответствуют oflag аргументы, используемые в _open и _sopen, как показано ниже.
Знаки в mode строки |
Equivalent oflagvalue for _open/_sopen |
---|---|
a |
_O_WRONLY | _O_APPEND(usually _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (usually _O_RDWR | _O_APPEND | _O_CREAT ) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY(usually _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR(usually _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
None |
n |
None |
Требования
Функция |
Обязательный заголовок |
---|---|
_fdopen |
<stdio.h> |
_wfdopen |
<stdio.h> или <wchar.h> |
Дополнительные сведения о совместимости см. Совместимость.
Пример
// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>
int main( void )
{
FILE *stream;
int fd, count = 0;
char inbuf[128];
// Open a file.
if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
exit( 1 );
// Get stream from file descriptor.
if( (stream = _fdopen( fd, "r" )) == NULL )
exit( 1 );
while( fgets( inbuf, 128, stream ) != NULL )
count++;
// After _fdopen, close by using fclose, not _close.
fclose( stream );
printf( "Lines in file: %d\n", count );
}
Входные данные: crt_fdopen.txt
Line one
Line two
Output
Lines in file: 2
Эквивалент в .NET Framework
System::IO::FileStream::FileStream