/************************************************************************* * * HTCd - Copyright (C) 1998-2006 Henrik Rydberg * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MREADH #define MREADH // These functions work with nonblocking pipes // as well as normal devices, and does not produce // any signals on pipe errors #include #include #include class mread { public: mread(); mread(int f); void setfd(int f) { clear(); fd=f; } int getfd() const { return fd; } void setflag(int f) { fcntl(fd,F_SETFL,f); } int getflag() const { return fcntl(fd,F_GETFL,0); } // Basic, pipe-safe, normally non-blocking, reads void clear(); int poll(); int read(char* s,int n); void putback(const sref& s); // Buffered reads int readx(char* s,int n); // may timeout and return less than wanted int readln(char* s,int n); int readpara(char* s,int n); private: int fd; mstring buf; }; // All functions return number of bytes written, or -1 on error. // Note that although ln and para continues to read until // it finds a newline or a paragraph, it may read more than that. // Use clear() to restore reading state #endif