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

📄 sfdctee.c

📁 su 的源代码库
💻 C
字号:
/* Copyright (c) Colorado School of Mines, 2006.*//* All rights reserved.                       */#include	"sfdchdr.h"/*	A discipline to tee the output to a stream to another stream.**	This is similar to what the "tee" program does. As implemented**	this discipline only works with file streams.****	Written by Kiem-Phong Vo, kpv@research.att.com, 03/18/1998.*//* the discipline structure for tee-ing */typedef struct _tee_s{	Sfdisc_t	disc;	/* the sfio discipline structure */	Sfio_t*		tee;	/* the stream to tee to */	int		status;	/* if tee stream is still ok */} Tee_t;/*	write to the teed stream.  */#if __STD_Cstatic ssize_t teewrite(Sfio_t* f, const Void_t* buf, size_t size, Sfdisc_t* disc)#elsestatic ssize_t teewrite(f,buf,size,disc)Sfio_t* 	f;	/* the stream being written to */Void_t*		buf;	/* the buffer of data being output */size_t		size;	/* the data size */Sfdisc_t*	disc;	/* the tee discipline */#endif{	reg Tee_t*	te = (Tee_t*)disc;	/* tee data if still ok */	if(te->status == 0 && sfwrite(te->tee,buf,size) != (ssize_t)size)		te->status = -1;	/* do the actual write */	return sfwr(f,buf,size,disc);}/* on close, remove the discipline */#if __STD_Cstatic int teeexcept(Sfio_t* f, int type, Void_t* data, Sfdisc_t* disc)#elsestatic int teeexcept(f,type,data,disc)Sfio_t*		f;int		type;Void_t*		data;Sfdisc_t*	disc;#endif{	if(type == SF_FINAL || type == SF_DPOP)		free(disc);	return 0;}#if __STD_Cint sfdctee(Sfio_t* f, Sfio_t* tee)#elseint sfdctee(f, tee)Sfio_t*	f;	/* stream to tee from	*/Sfio_t*	tee;	/* stream to tee to	*/#endif{	reg Tee_t*	te;	if(!(te = (Tee_t*)malloc(sizeof(Tee_t))) )		return -1;	te->disc.readf = NIL(Sfread_f);	te->disc.seekf = NIL(Sfseek_f);	te->disc.writef = teewrite;	te->disc.exceptf = teeexcept;	te->tee = tee;	te->status = 0;	if(sfdisc(f,(Sfdisc_t*)te) != (Sfdisc_t*)te)	{	free(te);		return -1;	}	return 0;}

⌨️ 快捷键说明

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