os::get_line_chars(int fd, char* buf, const size_t bsize)
-
//Linux版(jdk7/hotspot/src/share/vm/runtime/os.cpp) // Read file line by line, if line is longer than bsize, // skip rest of line. int os::get_line_chars(int fd, char* buf, const size_t bsize){ size_t sz, i = 0; // read until EOF, EOL or buf is full while ((sz = (int) read(fd, &buf[i], 1)) == 1 && i < (bsize-1) && buf[i] != '\n') { ++i; } if (buf[i] == '\n') { // EOL reached so ignore EOL character and return buf[i] = 0; return (int) i; } buf[i+1] = 0; if (sz != 1) { // EOF reached. if we read chars before EOF return them and // return EOF on next call otherwise return EOF return (i == 0) ? -1 : (int) i; } // line is longer than size of buf, skip to EOL int ch; while (read(fd, &ch, 1) == 1 && ch != '\n') { // Do nothing } // return initial part of line that fits in buf. // If we reached EOF, it will be returned on next call. return (int) i; }