s_getline.c

来自「这是一个同样来自贝尔实验室的和UNIX有着渊源的操作系统, 其简洁的设计和实现易」· C语言 代码 · 共 72 行

C
72
字号
#include <u.h>#include <libc.h>#include <bio.h>#include "String.h"/* Append an input line to a String. * * Returns a pointer to the character string (or 0). * Leading whitespace and newlines are removed. * * Empty lines and lines starting with '#' are ignored. */ extern char *s_getline(Biobuf *fp, String *to){	int c;	int len=0;	s_terminate(to);	/* end of input */	if ((c = Bgetc(fp)) < 0)		return 0;	/* take care of inconsequentials */	for(;;) {		/* eat leading white */		while(c==' ' || c=='\t' || c=='\n' || c=='\r')			c = Bgetc(fp);		if(c < 0)			return 0;		/* take care of comments */		if(c == '#'){			do {				c = Bgetc(fp);				if(c < 0)					return 0;			} while(c != '\n');			continue;		}		/* if we got here, we've gotten something useful */		break;	}	/* gather up a line */	for(;;) {		len++;		switch(c) {		case -1:			s_terminate(to);			return len ? to->ptr-len : 0;		case '\\':			c = Bgetc(fp);			if (c != '\n') {				s_putc(to, '\\');				s_putc(to, c);			}			break;		case '\n':			s_terminate(to);			return len ? to->ptr-len : 0;		default:			s_putc(to, c);			break;		}		c = Bgetc(fp);	}}

⌨️ 快捷键说明

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