WRITE(2)

이름
write - 파일 기술자가 가리키는 파일에 쓴다.

사용법
#include <unistd.h>

ssize_t write(int fd, const void *buf, size_t count);

설명
write는 buf로 시작하는 버퍼에서 파일 기술자 fd로 참조되는 파일에 count 바이트까지를 쓴다. POSIX는 write()가 반환된 후 새로운 데이터가 반환될 수 있다는 것을 증명하도록 read()를 요구한다. 모든 파일 시스템이 POSIX를 따르지는 않는다.

반환값
성공시, 쓰여진 바이트 수를 반환한다(0은 쓰여진 것이 없음을 나타낸다.) 에러라면, -1을 반환하며 errno는 적당한 값으로 설정된다. 만일 count가 0이고 파일 기술자가 정규 파일을 가리킨다면 0은 다른 결과를 야기시키지 않고 반환된다. 특수 파일에서의 결과는 호환되지 않는다.

에러

EBADF
    fd가 유효한 파일 기술자가 아니거나 쓰여지기 위해 열려지지 않았다.

EINVAL
    fd가 쓰기에 적당하지 않은 객체와 연결되었다.

EFAULT
    buf가 접근할 수 없는 주소 공간을 가리키고 있다.

EPIPE
    fd가 읽을 끝이 닫혀진 소켓이나 파이프에 연결되었다. 이것은 쓰고 있는 프로세스가 SIGPIPE 신호를 받았을때 일어난다; 이것이 잡히고, 봉쇄나 무시되면 EPIPE 에러가 리턴된다.

EAGAIN
    넌-블록킹 I/O가 O_NONBLOCK을 사용하였고 즉시 데이터를 쓰기 위해 fd와 연결된 파이프나 소켓에 공간이 없다.

EINTR
    어떤 데이터를 쓰기전 에 시스템 콜이 어떤 신호에 의해 인터럽트 되었다.

ENOSPC
    fd로 참조되는 파일을 포함하는 장치가 데이터를 위한 공간이 없다.

EIO inode를 수정하는 동안 저레벨 I/O 에러가 일어났다.

fd와 연결된 객체에 의존하여 다른 에러가 일어날 수 있다.

호환
SVr4, SVID, POSIX, X/OPEN, 4.3BSD. SVr4 문서에는 EDEADLK, EFBIG, ENOLCK, ENOLNK, ENOSR, ENXIO, EPIPE, ERANGE의 새로운 에러 조건이 추가되었다. SVr4에서는 데이터가 실제로 쓰여지기 이전 어느 시점에서도 쓰기 작업이 인터럽트 되어 EINTR 값이 반환될 수 있다.

관련 항목
open(2), read(2), fcntl(2), close(2), lseek(2), select(2), ioctl(2), fsync(2), fwrite(3)

역자
정강훈 <skyeyes@soback.kornet.net>, 2000년 5월 29일