Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Записывает данные в файл.
Синтаксис
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_WTEXTccs=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