_write
Zapisuje dane w pliku.
Składnia
int _write(
int fd,
const void *buffer,
unsigned int count
);
Parametry
fd
Deskryptor pliku, w którym są zapisywane dane.
buffer
Dane do zapisania.
count
Liczba bajtów.
Wartość zwracana
Jeśli operacja powiedzie się, _write
zwraca liczbę zapisanych bajtów. Jeśli rzeczywiste miejsce pozostałe na dysku jest mniejsze niż rozmiar buforu, funkcja próbuje zapisać na dysku, _write
kończy się niepowodzeniem i nie opróżni żadnej zawartości buforu na dysk. Zwracana wartość -1 wskazuje błąd. Jeśli przekazano nieprawidłowe parametry, ta funkcja wywołuje nieprawidłową procedurę obsługi parametrów zgodnie z opisem w temacie Weryfikacja parametrów. Jeśli wykonywanie jest dozwolone do kontynuowania, funkcja zwraca wartość -1 i errno
jest ustawiona na jedną z trzech wartości: EBADF
, co oznacza, że deskryptor pliku jest nieprawidłowy lub plik nie jest otwarty do zapisu; ENOSPC
, co oznacza, że na urządzeniu nie ma wystarczającej ilości miejsca na urządzeniu dla operacji; lub EINVAL
, co oznacza, że buffer
był to wskaźnik o wartości null lub że nieparzysta count
liczba bajtów została przekazana w trybie Unicode.
Aby uzyskać więcej informacji na temat tych i innych kodów powrotnych, zobacz errno
, _doserrno
, _sys_errlist
i _sys_nerr
.
Jeśli plik jest otwarty w trybie tekstowym, każdy znak kanału informacyjnego wiersza zostanie zastąpiony parą zestawienia powrotnego karetki w danych wyjściowych. Zamiana nie ma wpływu na wartość zwracaną.
Po otwarciu pliku w trybie tłumaczenia Unicode , na przykład, jeśli fd
jest otwarty przy użyciu lub _open
_sopen
i parametr trybu, który zawiera _O_WTEXT
, _O_U16TEXT
lub _O_U8TEXT
, lub jeśli jest otwarty przy użyciu fopen
i parametr trybu, który zawiera ccs=UNICODE
, ccs=UTF-8
ccs=UTF-16LE
lub , lub jeśli tryb zostanie zmieniony na tryb tłumaczenia Unicode przy _setmode
użyciu —buffer
jest interpretowany jako wskaźnik do tablicy zawierającej wchar_t
UTF-16
dane. Próba zapisania nieparzysta liczby bajtów w tym trybie powoduje błąd walidacji parametru.
Uwagi
Funkcja _write
zapisuje bajty count
z buffer
pliku skojarzonego z fd
. Operacja zapisu rozpoczyna się na bieżącej pozycji wskaźnika pliku (jeśli istnieje) skojarzonego z danym plikiem. Jeśli plik jest otwarty do dołączania, operacja rozpoczyna się na bieżącym końcu pliku. Po operacji zapisu wskaźnik pliku jest zwiększany o liczbę zapisanych bajtów.
Podczas zapisywania w plikach otwartych w trybie _write
tekstowym traktuje znak CTRL+Z jako logiczny koniec pliku. Podczas zapisywania na urządzeniu _write
traktuje znak CTRL+Z w buforze jako terminator wyjściowy.
Domyślnie stan globalny tej funkcji jest zakresem aplikacji. Aby zmienić to zachowanie, zobacz Stan globalny w CRT.
Wymagania
Procedura | Wymagany nagłówek |
---|---|
_write |
<io.h> |
Aby uzyskać więcej informacji o zgodności, zobacz Zgodność.
Przykład
// 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.