_write
Записывает данные в файл.
Синтаксис
int _write(
int fd,
const void *buffer,
unsigned int count
);
Параметры
fd
Дескриптор файла, в который записываются данные.
buffer
Записываемые данные.
count
Число байтов.
Возвращаемое значение
В случае успешного выполнения _write
возвращает число записанных байтов. Если фактическое пространство, оставшееся на диске, меньше размера буфера, функция пытается записать на диск, _write
завершается ошибкой и не сбрасывает содержимое буфера на диск. Возвращаемое значение -1 указывает на ошибку. Если передаются недопустимые параметры, эта функция вызывает обработчик недопустимых параметров, как описано в разделе проверки параметров. Если выполнение разрешено продолжать, функция возвращает значение -1 и errno
имеет одно из трех значений: EBADF
это означает, что дескриптор файла недопустим или файл не открыт для записи; ENOSPC
это означает, что на устройстве недостаточно места для операции; или EINVAL
, что означает, что был пустой указатель или что buffer
нечетный count
байт был передан в режиме Юникода.
Дополнительные сведения об этих и других кодах возврата см. в разделе errno
, _doserrno
и _sys_nerr
_sys_errlist
.
Если файл открыт в текстовом режиме, каждый символ веб-канала строки заменяется парой канала возвращаемой строки каретки в выходных данных. Замена не влияет на возвращаемое значение.
Когда fd
файл открывается в режиме перевода Юникода, например, если он открыт с помощью _open
или _sopen
параметром режима, который включает , или , или_O_U8TEXT
, если он открыт с помощью fopen
и параметром режима, который включает ccs=UTF-16LE
_O_WTEXT
ccs=UNICODE
_O_U16TEXT
, илиccs=UTF-8
, или, если режим изменяется на режим перевода Юникода с помощью_setmode
,buffer
интерпретируется как указатель на массив wchar_t
данных, содержащий UTF-16
данные. Попытка записи нечетного числа байт в этом режиме приводит к возникновению ошибки проверки параметра.
Замечания
Функция _write
записывает count
байт из buffer
в файл, связанный с fd
. Операция записи начинается с текущего положения указателя файла (при наличии), связанного с данным файлом. Если файл открыт для добавления, операция начинается с текущего конца файла. После операции записи указатель на файл увеличивается на число записанных байтов.
При записи в файлы, открытые в текстовом режиме, _write
обрабатывает символ CTRL+Z как логический конец файла. При записи на устройство _write
символ CTRL+Z в буфере обрабатывается как выходной терминатор.
По умолчанию глобальное состояние этой функции ограничивается приложением. Чтобы изменить это поведение, см . статью "Глобальное состояние" в CRT.
Требования
Маршрут | Обязательный заголовок |
---|---|
_write |
<io.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Пример
// 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.
См. также
Низкоуровневый ввод-вывод
fwrite
_open
, _wopen
_read
_setmode