_write
Menulis data ke file.
Sintaks
int _write(
int fd,
const void *buffer,
unsigned int count
);
Parameter
fd
Pendeskripsi file file tempat data ditulis.
buffer
Data yang akan ditulis.
count
Jumlah byte.
Nilai hasil
Jika berhasil, _write
mengembalikan jumlah byte yang ditulis. Jika ruang aktual yang tersisa pada disk kurang dari ukuran buffer, fungsi mencoba menulis ke disk, _write
gagal dan tidak menghapus konten buffer apa pun ke disk. Nilai pengembalian -1 menunjukkan kesalahan. Jika parameter yang tidak valid diteruskan, fungsi ini memanggil handler parameter yang tidak valid, seperti yang dijelaskan dalam Validasi parameter. Jika eksekusi diizinkan untuk melanjutkan, fungsi mengembalikan -1 dan errno
diatur ke salah satu dari tiga nilai: EBADF
, yang berarti deskriptor file tidak valid atau file tidak dibuka untuk ditulis; ENOSPC
, yang berarti tidak ada cukup ruang yang tersisa pada perangkat untuk operasi; atau EINVAL
, yang berarti bahwa buffer
itu adalah pointer null, atau bahwa ganjil count
byte diteruskan dalam mode Unicode.
Untuk informasi selengkapnya tentang kode pengembalian ini dan lainnya, lihat errno
, , _doserrno
_sys_errlist
, dan _sys_nerr
.
Jika file dibuka dalam mode teks, setiap karakter umpan baris diganti dengan pasangan umpan baris kembali pengangkutan dalam output. Penggantian tidak memengaruhi nilai pengembalian.
Ketika file dibuka dalam mode terjemahan Unicode—misalnya, jika fd
dibuka dengan menggunakan _open
atau _sopen
dan parameter mode yang menyertakan _O_WTEXT
, , _O_U16TEXT
atau _O_U8TEXT
, atau jika dibuka dengan menggunakan fopen
dan parameter mode yang menyertakan ccs=UNICODE
, , ccs=UTF-16LE
atau ccs=UTF-8
, atau jika mode diubah ke mode terjemahan Unicode dengan menggunakan _setmode
—buffer
ditafsirkan sebagai penunjuk ke array wchar_t
yang berisi UTF-16
data. Upaya untuk menulis jumlah byte ganjil dalam mode ini menyebabkan kesalahan validasi parameter.
Keterangan
Fungsi menulis _write
count
byte dari buffer
ke dalam file yang terkait dengan fd
. Operasi tulis dimulai pada posisi penunjuk file saat ini (jika ada) yang terkait dengan file yang diberikan. Jika file terbuka untuk ditambahkan, operasi dimulai di akhir file saat ini. Setelah operasi tulis, penunjuk file ditingkatkan dengan jumlah byte yang ditulis.
Ketika menulis ke file yang dibuka dalam mode teks, _write
memperlakukan karakter CTRL+Z sebagai akhir logis file. Saat menulis ke perangkat, _write
memperlakukan karakter CTRL+Z di buffer sebagai terminator output.
Secara default, status global fungsi ini dicakup ke aplikasi. Untuk mengubah perilaku ini, lihat Status global di CRT.
Persyaratan
Rutin | Header yang diperlukan |
---|---|
_write |
<io.h> |
Untuk informasi kompatibilitas selengkapnya, lihat Kompatibilitas.
Contoh
// crt__write.c
//
// This program opens a file for output and uses _write to write
// some bytes to the file.
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <share.h>
char buffer[] = "This is a test of '_write' function";
int main( void )
{
int fileHandle = 0;
unsigned bytesWritten = 0;
if ( _sopen_s(&fileHandle, "write.o", _O_RDWR | _O_CREAT,
_SH_DENYNO, _S_IREAD | _S_IWRITE) )
return -1;
if (( bytesWritten = _write( fileHandle, buffer, sizeof( buffer ))) == -1 )
{
switch(errno)
{
case EBADF:
perror("Bad file descriptor!");
break;
case ENOSPC:
perror("No space left on device!");
break;
case EINVAL:
perror("Invalid parameter: buffer was NULL!");
break;
default:
// An unrelated error occurred
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}
Wrote 36 bytes to file.