#include <unistd.h>
#include <errno.h>

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 > 0) {
        if ( (nwritten = write(fd, ptr, nleft)) <= 0) {
            if (nwritten < 0 && errno == EINTR) {
                nwritten = 0; /* call write() again */
            } else {
                return (-1); /* error */
            }
        } 
        nleft -= nwritten;
        ptr   += nwritten;
    }
    return (n - nwritten);
}

函数功能:往一个描述符写n字节