C語言代碼
// 從描述符 fd 讀取 n 個位元組
ssize_t readn(int fd, void *vptr, size_t n)
{
size_t nleft;
ssize_t nread;
char *ptr;
ptr = vptr;
nleft = n;
while (nleft > ){
if ( (nread = read(fd, ptr, nleft)) < ){
if (errno == EINTR)
nread = ; //再次調用read()
else
return -;
} else if (nread == )
break; // 檔案結束符
nleft -= nread;
ptr += nread;
}
return (n - nleft); // return >= 0
}
// 往描述符 fd 寫取 n 個位元組
ssize_t writen(int fd, const void *vptr, size_t n)
{
size_t nleft;
ssize_t nwritten;
const char *ptr;
ptr = vptr;
nleft = n;
while (nleft > ){
if ( (nwritten = write(fd, ptr, nleft)) <= ){
if (nwritten < && errno == EINTR)
nwritten = ; // 再次執行write()
else
return -; // error
}
nleft -= nwritten;
ptr += nwritten;
}
return n;
}