Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Mengaitkan aliran dengan file yang sebelumnya dibuka untuk I/O tingkat rendah.
Sintaks
FILE *_fdopen(
int fd,
const char *mode
);
FILE *_wfdopen(
int fd,
const wchar_t *mode
);
Parameter
fd
Pendeskripsi file dari file yang terbuka.
mode
Jenis akses file.
Nilai hasil
Masing-masing fungsi ini mengembalikan penunjuk ke aliran terbuka. Nilai penunjuk null menunjukkan kesalahan. Ketika kesalahan terjadi, handler parameter yang tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, errno diatur ke EBADF, yang menunjukkan pendeskripsi file yang buruk, atau EINVAL, yang menunjukkan bahwa itu mode adalah penunjuk null.
Untuk informasi selengkapnya tentang kode kesalahan ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.
Keterangan
Fungsi ini _fdopen mengaitkan aliran I/O dengan file yang diidentifikasi oleh fd, dan dengan demikian memungkinkan file yang dibuka untuk I/O tingkat rendah untuk di-buffer dan diformat. _wfdopen adalah versi karakter luas dari _fdopen; mode argumen ke _wfdopen adalah string karakter lebar. _wfdopen dan _fdopen jika tidak, berulah secara identik.
Deskriptor file yang diteruskan _fdopen dimiliki oleh aliran yang dikembalikan FILE * . Jika _fdopen berhasil, jangan panggil _close pada pendeskripsi file. Memanggil fclose pada yang dikembalikan FILE * juga menutup pendeskripsi file.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubahnya, lihat Status global di CRT.
String mode karakter menentukan jenis akses file yang diminta untuk file:
mode |
Access |
|---|---|
"r" |
Buka untuk membaca. Jika file tidak ada atau tidak dapat ditemukan, fopen panggilan gagal. |
"w" |
Membuka file kosong untuk ditulis. Jika file yang diberikan ada, isinya akan dihancurkan. |
"a" |
Terbuka untuk menulis di akhir file (menambahkan). Membuat file jika tidak ada. |
"r+" |
Terbuka untuk membaca dan menulis. File harus ada. |
"w+" |
Membuka file kosong untuk membaca dan menulis. Jika file ada, isinya akan dihancurkan. |
"a+" |
Terbuka untuk membaca dan menambahkan. Membuat file jika tidak ada. |
Ketika file dibuka dengan "a" jenis atau "a+" akses, semua operasi tulis terjadi di akhir file. Penunjuk file dapat diposisikan ulang dengan menggunakan fseek atau rewind, tetapi selalu dipindahkan kembali ke akhir file sebelum operasi tulis dilakukan. Dengan demikian, data yang ada tidak dapat ditimpa. "r+"Ketika jenis akses , , "w+"atau "a+" ditentukan, baik membaca dan menulis diizinkan (file dikatakan terbuka untuk "pembaruan"). Namun, ketika Anda beralih antara membaca dan menulis, harus ada operasi intervensi fflush, , fsetposfseek, atau rewind . Anda dapat menentukan posisi saat ini untuk fsetpos operasi atau fseek , jika Anda ingin.
Selain nilai di atas, karakter berikut juga dapat disertakan mode untuk menentukan mode terjemahan untuk karakter baris baru:
mode Pengubah |
Perilaku |
|---|---|
t |
Buka dalam mode teks (diterjemahkan). Dalam mode ini, kombinasi umpan garis balik (CR-LF) pengangkutan diterjemahkan ke dalam umpan satu baris (LF) pada input, dan karakter LF diterjemahkan ke kombinasi CR-LF pada output. Selain itu, Ctrl+Z ditafsirkan sebagai karakter akhir file pada input. |
b |
Buka dalam mode biner (tidak diterjemahkan). Setiap terjemahan dari t mode ditekan. |
c |
Aktifkan bendera penerapan untuk yang terkait filename sehingga konten buffer file ditulis langsung ke disk jika atau fflush _flushall dipanggil. |
n |
Reset bendera penerapan untuk yang terkait filename dengan "tanpa penerapan." Bendera ini adalah default. Ini juga mengambil alih bendera penerapan global jika Anda menautkan program Anda dengan Commode.obj. Default bendera penerapan global adalah "tanpa penerapan" kecuali Anda secara eksplisit menautkan program Anda dengan Commode.obj. |
Opsi t, c, dan n mode adalah ekstensi Microsoft untuk fopen dan _fdopen. Jangan gunakan jika Anda ingin mempertahankan portabilitas ANSI.
Jika t atau b tidak diberikan dalam mode, mode terjemahan default ditentukan oleh variabel _fmodeglobal . Jika t atau b diawali ke argumen, fungsi gagal dan mengembalikan NULL. Untuk diskusi teks dan mode biner, lihat Teks dan I/O file mode biner.
Karakter yang valid untuk string yang mode digunakan dalam fopen dan _fdopen sesuai dengan oflag argumen yang digunakan di dan _sopen, seperti yang ditunjukkan _open dalam tabel ini:
Karakter dalam mode string |
Nilai yang oflag setara untuk _open dan _sopen |
|---|---|
a |
_O_WRONLY | _O_APPEND (biasanya _O_WRONLY | _O_CREAT | _O_APPEND) |
a+ |
_O_RDWR | _O_APPEND (biasanya _O_RDWR | _O_APPEND | _O_CREAT) |
r |
_O_RDONLY |
r+ |
_O_RDWR |
w |
_O_WRONLY (biasanya _O_WRONLY | _O_CREAT | _O_TRUNC) |
w+ |
_O_RDWR (biasanya _O_RDWR | _O_CREAT | _O_TRUNC) |
b |
_O_BINARY |
t |
_O_TEXT |
c |
Tidak |
n |
Tidak |
Persyaratan
| Fungsi | Header yang diperlukan | Header C++ |
|---|---|---|
_fdopen |
<stdio.h> |
<cstdio> |
_wfdopen |
<stdio.h> atau <wchar.h> |
<cstdio> |
Untuk informasi selengkapnya tentang kesesuaian standar dan konvensi penamaan di pustaka runtime C, lihat Kompatibilitas.
Pemetaan rutin teks generik
<tchar.h> Rutin |
_UNICODE dan _MBCS tidak ditentukan |
_MBCS Didefinisikan |
_UNICODE Didefinisikan |
|---|---|---|---|
_tfdopen |
_fdopen |
_fdopen |
_wfdopen |
Contoh
// 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 );
}
Input: crt_fdopen.txt
Line one
Line two
Output
Lines in file: 2
Lihat juga
Streaming I/O
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen