readwrite.c
来自「EM算法的改进」· C语言 代码 · 共 119 行
C
119 行
/* * $Id: readwrite.c 1339 2006-09-21 19:46:28Z tbailey $ * * $Log$ * Revision 1.2 2005/10/25 19:06:39 nadya * rm old macro for Header, all info is taken care of by Id and Log. * * Revision 1.1.1.1 2005/07/29 17:25:14 nadya * Importing from meme-3.0.14, and adding configure/make * *//* Three utilities from _Unix_Network_Programming_ by W. R. Stevens.*/#include <stdio.h>#include "readwrite.h"/******************************************************************* * * int readn * * Read "n" bytes from a descriptor. * Use in place of read() when fd is a stream socket * * Stevens, p. 279 * *******************************************************************/extern int readn(register int fd, register char *ptr, register int nbytes){ int nleft, nread; nleft = nbytes; while (nleft > 0) { nread = read(fd, ptr, nleft); if (nread < 0) return(nread); /* error, return < 0 */ else if (nread == 0) break; /* EOF */ nleft -= nread; ptr += nread; } return(nbytes - nleft); /* return >= 0 */}/******************************************************************* * int writen * * Write 'n' bytes to a descriptor. * Use in place of write() when fd is a stream socket. * * Stevens, p. 279 * *******************************************************************/extern int writen(register int fd, register char *ptr, register int nbytes){ int nleft, nwritten; nleft = nbytes; while (nleft > 0) { nwritten = write(fd, ptr, nleft); if (nwritten <= 0) { perror(""); return(nwritten); /* error */ } nleft -= nwritten; ptr += nwritten; } return(nbytes - nleft);}/*********************************************************************** * * void readline * * Read a line from a descriptor. Read the line one byte at a time, * looking for the newline. We throw out the newline and end the * buffer with a null. * We return the number of characters up to, but not including * the null (the same as strlen(3)). * * Stevens, p. 280. * ***********************************************************************/extern int readline(register int fd, register char *ptr, register int maxlen){ int n, rc; char c; for (n = 1; n < maxlen; n++) { if ((rc = read(fd, &c, 1)) == 1) { if (c == '\n') break; *ptr++ = c; } else if (rc == 0) { if (n == 1) { return(0); /* EOF, no data read. */ } else break; /* EOF, some data was read. */ } else { fprintf(stderr, "Error in readn.\n"); return(-1); /* error */ } } *ptr = 0; /*printf("n=%d\n", n);*/ return(n);}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?