⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sio.h

📁 harvest是一个下载html网页得机器人
💻 H
字号:
/* * (c) Copyright 1992, 1993 by Panagiotis Tsirigotis * All rights reserved.  The file named COPYRIGHT specifies the terms * and conditions for redistribution. *//* * sio.h,v 1.1.1.1 1994/04/26 19:08:10 hardy Exp */#ifndef __SIO_H#define __SIO_H#include <errno.h>#ifdef __STRICT_ANSI__#include <stdarg.h>#else#include <varargs.h>#endif/* * Naming conventions: *		1) SIO functions and macros have names starting with a capital S *		2) SIO constants meant to be used by user programs have *			names starting with SIO_ *		3) Internal functions, struct identifiers, enum identifiers *			etc. have names starting with __sio *		4) Internal constants and macros have names starting with __SIO *//* * external constants * * SIO_FLUSH_ALL: flush all output streams * SIO_EOF:	eof on stream * SIO_ERR: operation failed */#define SIO_FLUSH_ALL				(-1)#define SIO_EOF						(-2)#define SIO_ERR						(-1)/* * Undo types */#define SIO_UNDO_LINE		0#define SIO_UNDO_CHAR		1/* * Buffering types */#define SIO_FULLBUF			0#define SIO_LINEBUF			1#define SIO_NOBUF				2/* * Descriptor for an input stream */struct __sio_input_descriptor{	/*	 * buf:		points to the buffer area.	 *				When doing memory mapping, it is equal to the unit	 *				from which we are reading. When doing buffered I/O	 *				it points to the primary buffer.	 */	char *buf ;	unsigned buffer_size ;	char *start ;                 /* start of valid buffer contents   	*/	char *end ;                   /* end of valid buffer contents + 1 	*/	char *nextb ;                 /* pointer to next byte to read/write 	*/											/* Always:  start <= nextb < end			*/	unsigned line_length ;	int max_line_length ;	int tied_fd ;	int memory_mapped ;				/* flag to denote if we use				*/											/* memory mapping								*/} ;typedef struct __sio_input_descriptor __sio_id_t ;/* * Descriptor for an output stream */struct __sio_output_descriptor{	/*	 * buf:		points to the buffer area.	 * buf_end: is equal to buf + buffer_size	 */	char *buf ;	char *buf_end ;	unsigned buffer_size ;	char *start ;                 /* start of valid buffer contents   	*/											/* (used by the R and W functions) 		*/	char *nextb ;                 /* pointer to next byte to read/write  */											/* Always:  start <= nextb < buf_end	*/	int buftype ;						/* type of buffering 						*/} ;typedef struct __sio_output_descriptor __sio_od_t ;/* * Stream types */enum __sio_stream { __SIO_INPUT_STREAM, __SIO_OUTPUT_STREAM } ;/* * General descriptor */struct __sio_descriptor{	union	{		__sio_id_t input_descriptor ;		__sio_od_t output_descriptor ;	} descriptor ;	enum __sio_stream stream_type ;	int initialized ;} ;typedef struct __sio_descriptor __sio_descriptor_t ;/* * The array of descriptors (as many as available file descriptors) */extern __sio_descriptor_t *__sio_descriptors ;extern int errno ;/* * Internally used macros */#define __SIO_FD_INITIALIZED( fd )		(__sio_descriptors[ fd ].initialized)#define __SIO_ID( fd )	(__sio_descriptors[ fd ].descriptor.input_descriptor)#define __SIO_OD( fd )	(__sio_descriptors[ fd ].descriptor.output_descriptor)#define __SIO_MUST_FLUSH( od, ch )													\					( (od).buftype != SIO_FULLBUF &&									\						( (od).buftype == SIO_NOBUF || ch == '\n' ) )/* * SIO Macros: * *		SIOLINELEN( fd ) *		SIOMAXLINELEN( fd ) *		Sputchar( fd, c ) *		Sgetchar( fd ) * * NOTE: The maximum line size depends on whether the descriptor *			was originally memory mapped. If it was, then the maximum *			line size will be the map_unit_size (a function of the system *			page size and PAGES_MAPPED). Otherwise, it will be either the *			optimal block size as reported by stat(2) or SIO_BUFFER_SIZE. */#define SIOLINELEN( fd )      __SIO_ID( fd ).line_length#define SIOMAXLINELEN( fd )																	\	(																									\		__SIO_FD_INITIALIZED( fd )																\			? ( 																						\				 (__sio_descriptors[ fd ].stream_type == __SIO_INPUT_STREAM)		\					? __SIO_ID( fd ).max_line_length											\					: ( errno = EBADF, SIO_ERR )												\			  )																						\			: (		/* not initialized; initialize it for input */					\				 (__sio_init( &__sio_descriptors[ fd ], fd, __SIO_INPUT_STREAM )	\																					== SIO_ERR)		\					? SIO_ERR																		\					: __SIO_ID( fd ).max_line_length											\			  )																						\	)/* * Adds a character to a buffer, returns the character or SIO_ERR */#define  __SIO_ADDCHAR( od, fd, c )                                  \     ( od.buftype == SIO_FULLBUF )                                   \         ? (int) ( *(od.nextb)++ = (unsigned char) (c) )             \         : ( od.buftype == SIO_LINEBUF )                             \               ? ( ( *(od.nextb) = (unsigned char) (c) ) != '\n' )   \                     ? (int) *(od.nextb)++                           \                     : Sputc( fd, *(od.nextb) )                      \               : Sputc( fd, c )/* * The Sgetchar/Sputchar macros depend on the fact that the fields * 				nextb, buf_end, end * are 0 if a stream descriptor is not being used or has not yet been * initialized. * This is true initially because of the static allocation of the * descriptor array, and Sdone must make sure that it is true * after I/O on a descriptor is over. */#define Sputchar( fd, c )														\		(																				\			( __SIO_OD( fd ).nextb < __SIO_OD( fd ).buf_end )			\				? ( __SIO_ADDCHAR( __SIO_OD( fd ), fd, c ) )				\				: Sputc( fd, c )													\		)#define Sgetchar( fd )													\		(																		\			( __SIO_ID( fd ).nextb < __SIO_ID( fd ).end )		\				? (int) *__SIO_ID( fd ).nextb++ 						\				: Sgetc( fd )												\		)#ifdef __ARGS#undef __ARGS#endif#ifdef PROTOTYPES#	define __ARGS( s )					s#else#	define __ARGS( s )					()#endif/* * The Read functions */int Sread __ARGS( ( int fd, char *buf, int nbytes ) ) ;int Sgetc __ARGS( ( int fd ) ) ;char *Srdline __ARGS( ( int fd ) ) ;char *Sfetch __ARGS( ( int fd, long *length ) ) ;/* * The Write functions */int Swrite __ARGS( ( int fd, char *buf, int nbytes ) ) ;int Sputc __ARGS( ( int fd, char c ) ) ;int Sprint __ARGS( ( int fd, char *format, ... ) ) ;int Sprintv __ARGS( ( int fd, char *format, va_list ) ) ;/* * other functions */int Sdone __ARGS( ( int fd ) ) ;int Sundo __ARGS( ( int fd, int type ) ) ;int Sflush __ARGS( ( int fd ) ) ;int Sclose __ARGS( ( int fd ) ) ;int Sbuftype __ARGS( ( int fd, int type ) ) ;#endif /* __SIO_H */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -