'programming/C_C++'에 해당되는 글 279건

  1. 2012.02.20 write writen writable_timeout

반응형

---------------------------------------------------------

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;
}

---------------------------------------------------------

반응형
Posted by 공간사랑
,