Partilhar via


_write

Grava dados em um arquivo.

Sintaxe

int _write(
   int fd,
   const void *buffer,
   unsigned int count
);

Parâmetros

fd
O descritor de arquivo do arquivo em que os dados são gravados.

buffer
Dados a serem gravados.

count
Quantidade de bytes.

Valor retornado

Em caso de êxito, _write retorna a quantidade de bytes gravados. Se o espaço restantes em disco for menor que o tamanho do buffer que a função está tentando gravar no disco, _write falha e não libera o conteúdo do buffer para o disco. Um valor retornado de -1 indica que há um erro. Se parâmetros inválidos forem passados, essa função invocará o manipulador de parâmetro inválido, conforme descrito em Validação de parâmetro. Se a execução tiver permissão para continuar, a função retornará -1 e errno será definida como um dos três valores: EBADF, o que significa que o descritor de arquivo é inválido ou o arquivo não está aberto para gravação; ENOSPC, o que significa que não há espaço suficiente no dispositivo para a operação; ou EINVAL, o que significa que buffer foi um ponteiro nulo ou que uma odd count de bytes foi passada no modo Unicode.

Para obter mais informações sobre esses e outros códigos de retorno, confira errno, _doserrno, _sys_errlist e _sys_nerr.

Se o arquivo for aberto no modo de texto, cada caractere de avanço de linha será substituído por um par carro de retorno na saída. Essa substituição não afeta o valor retornado.

Quando o arquivo é aberto no modo de conversão Unicode (por exemplo, se fd for aberto com o uso de _open ou _sopen e um parâmetro de modo que inclua _O_WTEXT, _O_U16TEXT ou _O_U8TEXT, ou se ele for aberto com uso de fopen e um parâmetro de modo que inclua , ccs=UNICODE, ccs=UTF-16LE ou ccs=UTF-8 se o modo for alterado para um modo de conversão Unicode com o uso de _setmodebuffer é interpretado como ponteiro para uma matriz de wchar_t que contém dados UTF-16. Tentar gravar uma quantidade ímpar de bytes nesse modo gera um erro de validação de parâmetro.

Comentários

A função _write grava count bytes de buffer no arquivo associado a fd. A operação de gravação começa na posição atual do ponteiro de arquivo (se houver) associado ao arquivo em questão. Se o arquivo estiver aberto para anexação, a operação começa no final do arquivo. Após a operação de gravação, o ponteiro do arquivo aumenta de acordo com a quantidade de bytes gravados.

Quando ele grava em arquivos abertos no modo de texto, _write trata um caractere CTRL+Z como o final lógico do arquivo. Quando ele grava em um dispositivo, _write trata um caractere CTRL+Z no buffer como um terminador de saída.

Por padrão, o estado global dessa função tem como escopo o aplicativo. Para alterar esse comportamento, confira Estado global no CRT.

Requisitos

Rotina Cabeçalho necessário
_write <io.h>

Para obter informações sobre compatibilidade, consulte Compatibilidade.

Exemplo

// 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.

Confira também

E/S de baixo nível
fwrite
_open, _wopen
_read
_setmode