_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. ENOSPC
To 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
_doserrno
errno
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_U16TEXT
nebo _O_U8TEXT
nebo , nebo pokud je otevřen pomocí fopen
a parametr režimu, který zahrnuje ccs=UNICODE
, ccs=UTF-16LE
nebo ccs=UTF-8
nebo , nebo pokud je režim změněn na režim překladu Unicode pomocí –buffer
_setmode
je 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 fd
k . 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