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