Bagikan melalui


_setmode

Mengatur mode terjemahan file.

Sintaks

int _setmode (
   int fd,
   int mode
);

Parameter

fd
Pendeskripsi file.

mode
Mode terjemahan baru.

Nilai hasil

Jika berhasil, mengembalikan mode terjemahan sebelumnya.

Jika parameter yang tidak valid diteruskan ke fungsi ini, handler parameter tidak valid dipanggil, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi ini mengembalikan -1 dan diatur errno ke EBADF, yang menunjukkan deskriptor file yang tidak valid, atau EINVAL, yang menunjukkan argumen yang tidak valid mode .

Untuk informasi selengkapnya tentang kode pengembalian ini dan lainnya, lihat errno, , _doserrno_sys_errlist, dan _sys_nerr.

Keterangan

Fungsi _setmode diatur ke mode mode terjemahan file yang diberikan oleh fd. Meneruskan _O_TEXT sebagai mode mengatur teks ANSI (yaitu, diterjemahkan) mode. Kombinasi umpan baris kembali (CR-LF) carriage diterjemahkan ke dalam karakter umpan baris tunggal pada input. Karakter umpan baris diterjemahkan ke dalam kombinasi CR-LF pada output. _O_BINARY Melewati mode biner (tidak diterjemahkan), di mana terjemahan ini ditekan.

Anda juga dapat meneruskan _O_U16TEXT, _O_U8TEXT, atau _O_WTEXT untuk mengaktifkan mode Unicode, seperti yang ditunjukkan dalam contoh kedua nanti dalam dokumen ini.

Perhatian

Mode Unicode adalah untuk fungsi cetak lebar (misalnya, wprintf) dan tidak didukung untuk fungsi cetak sempit. Penggunaan fungsi cetak sempit pada aliran mode Unicode memicu pernyataan.

_setmode biasanya digunakan untuk mengubah mode terjemahan default dan stdinstdout, tetapi Anda dapat menggunakannya pada file apa pun. Jika Anda menerapkan _setmode ke pendeskripsi file untuk aliran, panggil _setmode sebelum Anda melakukan operasi input atau output apa pun pada aliran.

Perhatian

Jika Anda menulis data ke aliran file, hapus kode secara eksplisit dengan menggunakan fflush sebelum Anda menggunakan _setmode untuk mengubah mode. Jika Anda tidak menghapus kode, Anda mungkin mendapatkan perilaku tak terduga. Jika Anda belum menulis data ke aliran, Anda tidak perlu menghapus kode.

Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.

Persyaratan

Rutin Header yang diperlukan Header Opsional
_setmode <io.h> <fcntl.h>

Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.

Contoh: Gunakan _setmode untuk mengubah stdin

// crt_setmode.c
// This program uses _setmode to change
// stdin from text mode to binary mode.

#include <stdio.h>
#include <fcntl.h>
#include <io.h>

int main( void )
{
   int result;

   // Set "stdin" to have binary mode:
   result = _setmode( _fileno( stdin ), _O_BINARY );
   if( result == -1 )
      perror( "Cannot set mode" );
   else
      printf( "'stdin' successfully changed to binary mode\n" );
}
'stdin' successfully changed to binary mode

Contoh: Gunakan _setmode untuk mengubah stdout

// crt_setmodeunicode.c
// This program uses _setmode to change
// stdout to Unicode. Cyrillic and Ideographic
// characters will appear on the console (if
// your console font supports those character sets).

#include <fcntl.h>
#include <io.h>
#include <stdio.h>

int main(void) {
    _setmode(_fileno(stdout), _O_U16TEXT);
    wprintf(L"\x043a\x043e\x0448\x043a\x0430 \x65e5\x672c\x56fd\n");
    return 0;
}

Lihat juga

Penanganan file
_creat, _wcreat
fopen, _wfopen
_open, _wopen
_set_fmode