_write
파일에 데이터를 씁니다.
구문
int _write(
int fd,
const void *buffer,
unsigned int count
);
매개 변수
fd
데이터를 쓸 파일의 파일 설명자입니다.
buffer
쓸 데이터입니다.
count
바이트 수입니다.
반환 값
성공 _write
하면 기록된 바이트 수를 반환합니다. 디스크에 남아 있는 실제 공간이 함수가 디스크에 쓰려고 하는 버퍼 크기보다 작으면 실패하고 버퍼의 내용을 디스크 _write
에 플러시하지 않습니다. 반환 값 -1은 오류를 나타냅니다. 잘못된 매개 변수가 전달되면 이 함수는 매개 변수 유효성 검사에 설명된 대로 잘못된 매개 변수 처리기를 호출합니다. 실행을 계속할 수 있는 경우 함수는 -1을 반환하고 errno
세 가지 값 EBADF
중 하나로 설정됩니다. 즉, 파일 설명자가 잘못되었거나 파일을 쓰기 ENOSPC
위해 열리지 않습니다. 즉, 작업에 사용할 공간이 부족합니다. 즉EINVAL
, null 포인터이거나 count
홀수 바이트가 유니코드 모드로 전달되었음을 의미 buffer
합니다.
이러한 코드 및 기타 반환 코드에 대한 자세한 내용은 , _doserrno
및 _sys_nerr
_sys_errlist
를 참조하세요.errno
파일이 텍스트 모드로 열리면 각 줄 바꿈 문자가 출력에서 캐리지 리턴 라인 피드 쌍으로 바뀝 있습니다. 대체는 반환 값에 영향을 주지 않습니다.
파일을 유니코드 변환 모드로 열 때fd
(예: 사용 또는 _sopen
모드 매개 변수를 포함하는 _O_WTEXT
_O_U16TEXT
모드 매개 변수를 _O_U8TEXT
열 _open
거나, 사용 fopen
으로 열거나, ccs=UTF-16LE
모드 매개 변수를 포함하는 ccs=UNICODE
모드 매개 변수를 열거나ccs=UTF-8
, 또는 모드를 사용하여 _setmode
유니코드 변환 모드로 변경된 경우)buffer
는 데이터가 포함된 UTF-16
배열 wchar_t
에 대한 포인터로 해석됩니다. 이 모드에서 홀수 바이트를 쓰려고 하면 매개 변수 유효성 검사 오류가 발생합니다.
설명
_write
함수는 count
에서 buffer
와 연결된 파일로 fd
바이트를 씁니다. 쓰기 작업은 지정된 파일과 연결된 파일 포인터(있는 경우)의 현재 위치에서 시작됩니다. 추가의 목적으로 파일을 연 경우 쓰기 작업은 파일의 현재 끝에서 시작됩니다. 쓰기 작업 후에는 파일 포인터가 기록된 바이트 수만큼 증가합니다.
텍스트 모드 _write
에서 열린 파일에 쓸 때 Ctrl+Z 문자를 파일의 논리적 끝으로 처리합니다. 디바이스 _write
에 쓸 때 버퍼의 Ctrl+Z 문자를 출력 종결자로 처리합니다.
기본적으로 이 함수의 전역 상태는 애플리케이션으로 범위가 지정됩니다. 이 동작을 변경하려면 CRT 전역 상태를 참조하세요.
요구 사항
루틴에서 반환된 값 | 필수 헤더 |
---|---|
_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 occurred
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}
Wrote 36 bytes to file.