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

📄 filebuf.c

📁 c 语言编译器 源代码- c compiler
💻 C
字号:
/* @(#) filebuf.c 1.2 1/27/86 17:48:01 *//*ident	"@(#)cfront:lib/stream/filebuf.c	1.2"*/#include "stream.h"/* define some UNIX calls */extern int open (char *, int);extern int close (int);extern long lseek (int, long, int);extern int read (int, char *, unsigned);extern int write (int, char *, unsigned);extern int creat (char *, int);/* *	Open a file with the given mode. *	Return:		NULL if failure *			this if success */filebuf* filebuf.open (char *name, open_mode om){	switch (om) {	case input:			fd = ::open(name, 0);		break;	case output:			if ((fd = ::open(name,1)) < 0) fd = creat(name, 664);		break;	case append:			if ((fd = ::open(name,1)) < 0)			fd = creat(name, 664);		else {			if (lseek(fd, 0, 2) < 0) {				(void)::close(fd);				fd = -1;			}		}		break;	}	if (fd < 0) return NULL;	opened = 1;	return this;}/* *	Empty an output buffer. *	Returns:	EOF on error *			0 on success */int filebuf.overflow(int c){	if (!opened || allocate()==EOF) return EOF;	if (base == eptr) {		/* unbuffered IO */		if (c != EOF) {			*pptr = c;			if (write(fd, pptr, 1) != 1) return EOF;		}	} else {		/* buffered IO */		if (pptr > base)			if (write(fd, base, pptr-base) != pptr-base) return EOF;		pptr = gptr = base;		if (c != EOF) *pptr++ = c;	}	return c & 0377;}/* *	Fill an input buffer. *	Returns:	EOF on error or end of input *			next character on success */int filebuf.underflow(){	int count;	if (!opened || allocate()==EOF) return EOF;	if ((count=read(fd, base, eptr-base)) < 1) return EOF;	gptr = base;	pptr = base + count;	return *gptr & 0377;}

⌨️ 快捷键说明

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