---------------------------------------------------------
write() 함수
설명
open() 함수로 열기를 한 파일에 쓰기를 합니다. open()함수는 fcntl.h 에 정의 되어 있지만
write(), read(), close()는 unistd.h에 정의 되어 있습니다.
헤더
unistd.h
형태
ssize_t write (int fd, const void *buf, size_t n)
인수
int fd : 파일 디스크립터
void *buf : 파일에 쓰기를 할 내용을 담은 버퍼
size_t n : 쓰기할 바이트 개수
반환
ssize_t 정상적 쓰기를 했다면 쓰기를 한 바이트 개수를, 실패했다면 -1을 반환
---------------------------------------------------------
int select(int n, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout);
==> return값이 0이면 timeout, -1이면 에러
---------------------------------------------------------
ssize_t writen(int fd, unsigned char *ptr, size_t nbytes)
{
int nleft;
ssize_t nwritten;
nleft = nbytes;
while (nleft > 0) {
nwritten = write(fd, ptr, nleft);
if (nwritten <= 0) {
return (nwritten); /* error */
}
nleft -= nwritten;
ptr += nwritten;
}
return (nbytes - nleft);
}
---------------------------------------------------------
int writable_timeout(int fd, int sec)
{
fd_set wset;
struct timeval tv;
FD_ZERO(&wset);
FD_SET(fd, &wset);
tv.tv_sec = sec;
tv.tv_usec = 0;
return (select(fd + 1, NULL, &wset, NULL, &tv));
}
---------------------------------------------------------
if( writable_timeout(fd, 3) <= 0 ) {
//Error Handling Code;
}
if ((ret = writen(fd, buf, ilen)) != ilen) {
//Error Handling Code;
}
---------------------------------------------------------