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

📄 tseek.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"sftest.h"static int Bufcount = 0;#if __STD_Cssize_t readbuf(Sfio_t* f, Void_t* buf, size_t n, Sfdisc_t* disc)#elsessize_t readbuf(f,buf,n,disc)Sfio_t*		f;Void_t*		buf;size_t		n;Sfdisc_t*	disc;#endif{	Bufcount += 1;	return sfrd(f,buf,n,disc);}Sfdisc_t Disc = {readbuf, (Sfwrite_f)0, (Sfseek_f)0, (Sfexcept_f)0, (Sfdisc_t*)0};MAIN(){	Sfio_t	*f, *sf;	char	*ss, *s;	int	n, i;	char	zero[SF_BUFSIZE*2];	char	buf[SF_BUFSIZE], little[512];	Sfoff_t	one, two;	s = "123456789\n";	n = strlen(s);	if(!(f = sfopen((Sfio_t*)0, tstfile(0),"w")))		terror("Opening file to write\n");	for(i = 0; i < 1000; ++i)		if(sfwrite(f,s,n) != n)			terror("Writing data\n");	if(!(f = sfopen(f, tstfile(0),"r")))		terror("Opening file to read\n");	if(sfseek(f,(Sfoff_t)128,0) != (Sfoff_t)128)		terror("Bad seek to 128\n");	if(sfseek(f,(Sfoff_t)0,1) != (Sfoff_t)128)		terror("Bad seek(0,1) to 128\n");	if(sfseek(f,(Sfoff_t)0,2) != (i*n))		terror("Bad file length\n");	if(sftell(f) != (i*n))		terror("sftell\n");	for(; i > 0; --i)	{	sfseek(f,(Sfoff_t)(-i*n),2);		if(!(ss = sfgetr(f,'\n',1)))			terror("sfgetr\n");		if(strncmp(ss,s,sfvalue(f)-1) != 0)			terror("Expect=%s\n",s);	}	if(!(f = sfopen(f,tstfile(0),"w")) )		terror("Open to write\n");	for(n = sizeof(zero)-1; n >= 0; --n)		zero[n] = 0;	if(sfwrite(f,zero,sizeof(zero)) != sizeof(zero))		terror("Writing data\n");	one = sfseek(f,(Sfoff_t)0,2);	two = (Sfoff_t)lseek(sffileno(f), (off_t)0, 2);	if(one != two)		terror("seeking1\n");	if(sfseek(f,(Sfoff_t)(-1),2) != (Sfoff_t)lseek(sffileno(f), (off_t)(-1), 2))		terror("seeking2\n");	if(!(f = sfopen(f,tstfile(0),"w")))		terror("Open to write2\n");	for(n = 0; n < sizeof(buf); n++)		buf[n] = n;	for(n = 0; n < 256; n++)		if(sfwrite(f,buf,sizeof(buf)) != sizeof(buf))			terror("Writing data 2\n");	if(!(f = sfopen(f,tstfile(0),"r")))		terror("Open to read2\n");	if(sfgetc(f) != 0 && sfgetc(f) != 1)		terror("Get first 2 bytes\n");	if(sfseek(f,(Sfoff_t)(128*sizeof(buf)),0) != (Sfoff_t)128*sizeof(buf) )		terror("Seeking \n");	for(n = 0; n < 128; ++n)		if(sfread(f,buf,sizeof(buf)) != sizeof(buf))			terror("Reading data\n");	if(!(f = sfopen(f,tstfile(0),"r")))		terror("Open to read3\n");	sfsetbuf(f,little,sizeof(little));	if(sfread(f, buf, 10) != 10)		terror("sfread failed\n");	if(sftell(f) != (Sfoff_t)10)		terror("sftell failed\n");	if(sfseek(f, (Sfoff_t)10, SEEK_CUR|SF_PUBLIC) != (Sfoff_t)20)		terror("sfseek failed\n");	sfseek(f, (Sfoff_t)0, SEEK_SET);	if(!(sf = sfnew((Sfio_t*)0, little, sizeof(little), sffileno(f), SF_READ)) )		terror("sfnew failed\n");	if(sfread(f, buf, 10) != 10)		terror("sfread failed2\n");	if(sftell(f) != 10)		terror("sftell failed2\n");	if(sfseek(sf, (Sfoff_t)4000, SEEK_SET) != (Sfoff_t)4000)		terror("sfseek failed on sf\n");	sfsync(sf);	if(sfseek(f, (Sfoff_t)10, SEEK_CUR|SF_PUBLIC) != (Sfoff_t)4010)		terror("sfseek public failed\n");	/* test to see if the buffering algorithm does the right thing */	if(!(f = sfopen(NIL(Sfio_t*),tstfile(0),"w")) )		terror("Opening test file to write");	for(i = 0; i < 8192; ++i)		if(sfputr(f,"123456789",'\n') != 10)			terror("writing test data");	if(!(f = sfopen(f,tstfile(0),"r")) )		terror("Opening test file to read");	sfdisc(f,&Disc);	sfsetbuf(f,NIL(Void_t*),8192);	for(i = 0; i < 8192; ++i)	{	sfseek(f, (Sfoff_t)(i*10), 0);		if(!(s = sfgetr(f, '\n', SF_STRING)) )			terror("Reading data");		if(strcmp(s,"123456789") != 0)			terror("Bad data");	}	if(Bufcount != 10)		terror("Bad buffer filling count");	TSTEXIT(0);}

⌨️ 快捷键说明

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