#include /* * Legge una linea dal descrittore, un byte alla volta, controllando il * fineriga. Mette la linea nel buffer, e la termina con null. * Ritorna il numero di caratteri fino al terminatore (escluso). * */ int readline(int fd, char *ptr, int maxlen) { int n, rc; char c; for (n = 1; n <= maxlen; n++) { if ( (rc = read(fd, &c, 1)) == 1) { *ptr++ = c; if (c == '\n') break; } else if (rc == 0) { if (n == 1) return(0); /* EOF, no data read */ else break; /* EOF, some data was read */ } else return(-1); /* error */ } /* DLH - strip newline */ *(ptr-1) = 0; return(n-1); } /* * Scrive "n" byte sul descrittore. */ int writen(int fd, char *ptr, int nbytes) { int nleft, 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 writeline( int fd, char *s ) { char c = '\n'; writen(fd,s,strlen(s)); writen(fd,&c,1); }