readn writen readline

    技术2025-02-18  8

    size_t writen(int fd,const void *vptr, size_t n) { size_t nleft; size_t nwritten; const char *ptr; nleft = n; ptr = vptr; while (nleft > 0) { if ((nwritten = write(fd, ptr, nleft)) < 0) { if (ERROR == EINTR) { nwritten = 0; }else return (-1); } nleft -= nwritten; ptr += nwritten; } return n; } static size_t my_read(int fd, char *ptr) { static int read_cnt = 0; static char *read_ptr; static char read_buf[MAXLINE]; if (read_cnt <= 0) { again; if ((read_cnt = read(fd, read_buf, sizeof(read_buf)))< 0) { if (ERROR == EINTR) goto again; else return (-1); }else if (read_cnt == 0) { return (0); } read_ptr = read_buf; } read_cnt--; *ptr = *read_ptr++; return (1); } size_t readline(int fd, void *vptr, size_t maxlen) { int n, rc; char c, *ptr; ptr = vptr; for (n = 0; n < maxlen; ++n) { if ((rc = my_read(fd, &c)) == 1) { *ptr++ = c; if (c == '/n') break; }else if (rc == 0) { if (n == 0) { return (0); }else break; }else return (-1); } *ptr = 0; return (n); }

    最新回复(0)