Share via


_write

Zapíše data do souboru.

Syntaxe

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

Parametry

fd
Popisovač souboru, do kterého se zapisuje data.

buffer
Data, která se mají zapsat.

count
Počet bajtů

Vrácená hodnota

V případě úspěchu _write vrátí počet zapsaných bajtů. Pokud je skutečné místo na disku menší než velikost vyrovnávací paměti, která se funkce pokouší zapisovat na disk, _write selže a nevyprázdní žádný obsah vyrovnávací paměti na disk. Návratová hodnota -1 označuje chybu. Pokud jsou předány neplatné parametry, tato funkce vyvolá neplatnou obslužnou rutinu parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, funkce vrátí hodnotu -1 a errno je nastavená na jednu ze tří hodnot: EBADF, což znamená, že popisovač souboru je neplatný nebo soubor není otevřen pro zápis. ENOSPCTo znamená, že na zařízení není dostatek místa pro operaci; nebo EINVAL, což znamená, že buffer byl ukazatel null nebo že v režimu Unicode byla předána lichá hodnota count bajtů.

Další informace o těchto a dalších návratových kódech naleznete v tématu , , , a_sys_nerr . _sys_errlist_doserrnoerrno

Pokud je soubor otevřen v textovém režimu, nahradí se každý znak kanálu řádku dvojicí návratového kanálu řádku ve výstupu. Nahrazení nemá vliv na vrácenou hodnotu.

Když se soubor otevře v režimu překladu Unicode , například pokud fd je otevřen pomocí _open nebo _sopen a parametr režimu, který zahrnuje _O_WTEXT, _O_U16TEXTnebo _O_U8TEXTnebo , nebo pokud je otevřen pomocí fopen a parametr režimu, který zahrnuje ccs=UNICODE, ccs=UTF-16LEnebo ccs=UTF-8nebo , nebo pokud je režim změněn na režim překladu Unicode pomocí –buffer_setmodeje interpretován jako ukazatel na pole wchar_t obsahující UTF-16 data. Pokus o zápis lichého počtu bajtů v tomto režimu způsobí chybu ověření parametru.

Poznámky

Funkce _write zapisuje count bajty ze buffer souboru přidruženého fdk . Operace zápisu začíná na aktuální pozici ukazatele souboru (pokud existuje) přidruženého k danému souboru. Pokud je soubor otevřený pro připojení, operace začíná na aktuálním konci souboru. Po operaci zápisu se ukazatel souboru zvýší počtem zapsaných bajtů.

Při zápisu do souborů otevřených v textovém režimu _write považuje znak CTRL+Z za logický konec souboru. Když se zapíše do zařízení, _write považuje znak CTRL+Z ve vyrovnávací paměti za výstupní ukončovací znak.

Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Chcete-li toto chování změnit, přečtěte si téma Globální stav v CRT.

Požadavky

Rutina Požadovaný hlavičkový soubor
_write <io.h>

Další informace o kompatibilitě najdete v tématu Kompatibilita.

Příklad

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

Viz také

Vstupně-výstupní operace nízké úrovně
fwrite
_open, _wopen
_read
_setmode