Bagikan melalui


I/O aliran

Fungsi-fungsi ini memproses data dalam berbagai ukuran dan format, dari karakter tunggal hingga struktur data besar. Mereka juga menyediakan buffering, yang dapat meningkatkan performa. Ukuran default buffer stream adalah 4K. Rutinitas ini hanya memengaruhi buffer yang dibuat oleh rutinitas pustaka run-time, dan tidak berpengaruh pada buffer yang dibuat oleh sistem operasi.

Mengalirkan rutinitas I/O

Rutin Menggunakan
clearerr, clearerr_s Bersihkan indikator kesalahan untuk aliran
fclose Tutup aliran
_fcloseall Tutup semua aliran terbuka kecuali stdin, stdout, dan stderr
_fdopen, wfdopen Mengaitkan aliran dengan pendeskripsi file dari file terbuka
feof Menguji akhir file pada aliran
ferror Uji kesalahan saat streaming
fflush Menghapus aliran ke buffer atau perangkat penyimpanan
fgetc, fgetwc Membaca karakter dari aliran (versi getc fungsi dan getwc)
_fgetchar, _fgetwchar Membaca karakter dari stdin (versi getchar fungsi dan getwchar)
fgetpos Mendapatkan indikator posisi aliran
fgets, fgetws Membaca string dari aliran
_fileno Mendapatkan pendeskripsi file yang terkait dengan aliran
_flushall Menghapus semua aliran ke buffer atau perangkat penyimpanan
fopen, , _wfopenfopen_s,_wfopen_s Buka aliran
fprintf, , _fprintf_lfwprintf, _fwprintf_l, fprintf_s, _fprintf_s_l, , , fwprintf_s_fwprintf_s_l Menulis data yang diformat untuk dialirkan
fputc, fputwc Menulis karakter ke aliran (versi putc fungsi dan putwc)
_fputchar, _fputwchar Tulis karakter ke stdout (versi putchar fungsi dan putwchar)
fputs, fputws Tulis string untuk mengalirkan
fread Membaca data yang tidak diformat dari aliran
freopen, , _wfreopenfreopen_s,_wfreopen_s Menetapkan ulang FILE penunjuk aliran ke file atau perangkat baru
fscanf, , fscanf_sfwscanf, _fscanf_s_l, , , fwscanf_s_fwscanf_s_l Membaca data yang diformat dari aliran
fseek, _fseeki64 Pindahkan posisi file ke lokasi yang diberikan
fsetpos Mengatur indikator posisi aliran
_fsopen, _wfsopen Buka aliran dengan berbagi file
ftell, _ftelli64 Dapatkan posisi file saat ini
fwrite Menulis item data yang tidak diformat untuk dialirkan
getc, getwc Membaca karakter dari aliran (versi fgetc makro dan fgetwc)
getchar, getwchar Membaca karakter dari stdin (versi fgetchar makro dan fgetwchar)
_getmaxstdio Mengembalikan jumlah file yang terbuka secara bersamaan yang diizinkan di tingkat I/O aliran.
gets_s, _getws_s Membaca baris dari stdin
_getw Membaca biner int dari aliran
printf, , _printf_lwprintf, _wprintf_l,printf_s , _printf_s_l, , , wprintf_s_wprintf_s_l Menulis data yang diformat ke stdout
putc, putwc Menulis karakter ke aliran (versi fputc makro dan fputwc)
putchar, putwchar Tulis karakter ke stdout (versi fputchar makro dan fputwchar)
puts, _putws Menulis baris ke aliran
_putw Menulis biner int ke aliran
rewind Memindahkan posisi file ke awal aliran
_rmtmp Hapus file sementara yang dibuat oleh tmpfile
scanf, , _scanf_lwscanf, _wscanf_l,scanf_s , _scanf_s_l, , , wscanf_s_wscanf_s_l Membaca data yang diformat dari stdin
setbuf Mengontrol buffering aliran
_setmaxstdio Atur maksimum untuk jumlah file yang terbuka secara bersamaan di tingkat I/O aliran.
setvbuf Mengontrol buffering stream dan ukuran buffer
_snprintf, , _snprintf_s_snwprintf, _snprintf_s_l, , , _snwprintf_s_snwprintf_s_l Menulis data yang diformat dengan panjang yang ditentukan untuk string
_snscanf, , _snscanf_s_snwscanf, _snscanf_s_l, , , _snwscanf_s_snwscanf_s_l Membaca data yang diformat dengan panjang yang ditentukan dari aliran input standar.
sprintf, , sprintf_sswprintf, _sprintf_s_l, , , swprintf_s_swprintf_s_l Menulis data yang diformat ke string
sscanf, , swscanfsscanf_s, _sscanf_s_l, , swscanf_s_swscanf_s_l Membaca data yang diformat dari string
_tempnam, _wtempnam Hasilkan nama file sementara dalam direktori tertentu
tmpfile, tmpfile_s Membuat file sementara
tmpnam, , _wtmpnamtmpnam_s,_wtmpnam_s Hasilkan nama file sementara
ungetc, ungetwc Dorong karakter kembali ke aliran
_vcprintf, , _vcprintf_s_vcwprintf, _vcprintf_s_l, , , _vcwprintf_s_vcwprintf_s_l Tulis data yang diformat ke konsol.
vfprintf, , vfprintf_svfwprintf, _vfprintf_s_l, , , vfwprintf_s_vfwprintf_s_l Menulis data yang diformat untuk dialirkan
vprintf, , vprintf_svwprintf, _vprintf_s_l, , , vwprintf_s_vwprintf_s_l Menulis data yang diformat ke stdout
_vsnprintf, , _vsnwprintfvsnprintf_s, _vsnprintf_s, _vsnprintf_s_l, , , _vsnwprintf_s_vsnwprintf_s_l Menulis data yang diformat dengan panjang yang ditentukan ke buffer
vsprintf, , vsprintf_svswprintf, _vsprintf_s_l, , , vswprintf_s_vswprintf_s_l Menulis data yang diformat ke buffer

Ketika program memulai eksekusi, kode startup secara otomatis membuka beberapa aliran: input standar (ditunjuk oleh stdin), output standar (ditunjuk oleh stdout), dan kesalahan standar (ditunjuk oleh stderr). Aliran ini diarahkan ke konsol (keyboard dan layar) secara default. Gunakan freopen untuk mengalihkan stdin, stdout, atau stderr ke file disk atau perangkat.

File yang dibuka menggunakan rutinitas aliran di-buffer secara default. Fungsi stdout dan stderr dibersihkan setiap kali penuh atau, jika Anda menulis ke perangkat karakter, setelah setiap panggilan pustaka. Jika program berakhir secara abnorrmal, buffer output mungkin tidak dibersihkan, yang mengakibatkan hilangnya data. Gunakan fflush atau _flushall untuk memastikan bahwa buffer yang terkait dengan file tertentu dihapus ke sistem operasi, atau semua buffer terbuka dibersihkan. Sistem operasi dapat menyimpan data sebelum menulisnya ke disk. Fitur commit-to-disk memastikan bahwa konten buffer yang dibersihkan tidak hilang jika ada kegagalan sistem.

Ada dua cara untuk menerapkan konten buffer ke disk:

  • Tautkan dengan file COMMODE. OBJ untuk menetapkan bendera penerapan global. Pengaturan default bendera global adalah n, untuk "tanpa penerapan."

  • Atur bendera mode ke c dengan fopen atau _fdopen.

File apa pun yang secara khusus dibuka dengan c bendera atau n berperilaku sesuai dengan bendera, terlepas dari status bendera penerapan/tanpa penerapan global.

Jika program Anda tidak secara eksplisit menutup aliran, aliran akan ditutup secara otomatis saat program berakhir. Namun, Anda harus menutup streaming ketika program Anda selesai dengannya, karena jumlah aliran yang dapat terbuka pada satu waktu terbatas. Lihat _setmaxstdio untuk informasi tentang batas ini.

Input dapat mengikuti output secara langsung hanya dengan panggilan intervensi ke fflush atau ke fungsi pemosisian file (fseek, fsetpos, atau rewind). Input dapat diikuti dengan output tanpa panggilan intervensi ke fungsi penempatan file, jika operasi input menemukan akhir file.

Lihat juga

Input dan output
Rutinitas runtime Universal C menurut kategori