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


_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_errlist, and _sys_nerr.

Если файл открыт в текстовом режиме, в выводе каждый символ перевода строки заменяется парой "возврат каретки — перевод строки". Эта замена не влияет на возвращаемое значение.

Если файл открыт в режиме преобразования Юникода (например, если fd открыт с помощью _open или _sopen и параметра режима, который включает _O_WTEXT, _O_U16TEXT или _O_U8TEXT, или если он открыт с помощью fopen и параметра режима, который включает ccs=UNICODE, ccs=UTF-16LE или ccs=UTF-8, или если режим изменен на режим преобразования Юникода с помощью _setmode), buffer интерпретируется как указатель на массив wchar_t, который содержит данные UTF-16. Попытка записи нечетного числа байт в этом режиме приводит к возникновению ошибки проверки параметра.

Заметки

Функция _write записывает count байт из buffer в файл, связанный с fd. Операция записи начинается с текущего положения указателя файла (при наличии), связанного с данным файлом. Если файл открыт для добавления, операция начинается с текущего конца файла. После выполнения операции записи указатель файла увеличивается на число фактически записанных байт.

При записи в файлы, открытые в текстовом режиме, _write обрабатывает символ CTRL+Z как логический конец файла. При записи на устройство _write обрабатывает символ CTRL+Z в буфере как символ окончания вывода.

Требования

Подпрограмма

Обязательный заголовок

_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 occured 
            perror("Unexpected error!");
      }
   }
   else
   {
      printf_s( "Wrote %u bytes to file.\n", bytesWritten );
   }
   _close( fileHandle );
}
  

См. также

Ссылки

Низкоуровневый ввод-вывод

fwrite

_open, _wopen

_read

_setmode