Поделиться через


_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_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