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

📄 x_rls.c

📁 关于SHELL方面的
💻 C
字号:
/* x_rls.c - x_rls */#include <conf.h>#include <kernel.h>#include <shell.h>#include <network.h>/*------------------------------------------------------------------------ *  x_rls  -  (command rls) list contents of remote file system directory *------------------------------------------------------------------------ */COMMANDx_rls(int stdin, int stdout, int stderr, int nargs, char *args[]){	char	*p, *buf;	int	dev, len;	char	str[256];	struct	dirent	{	/* UNIX directory entry		*/		long	d_inum;	/* file's inode number		*/		short	d_rlen;	/* length of this record	*/		short	d_nlen;	/* length of this file's name	*/		char	d_nam[1]; /* start of file name		*/	};	struct	dirent	*d;	Bool	aflag;	aflag = FALSE;	if (nargs > 1 && strcmp(p=args[1],"-a") == 0) {		nargs--;		aflag = TRUE;		p = args[2];        }	if (nargs == 1)	  p = ".";	else if (nargs != 2) {		printf("Usage: rls [-a] directory\n");		return(SYSERR);	}	if ( ((long)(buf=(char *)getmem(512))) == SYSERR) {		fprintf(stderr, "rls: no memory\n");		return(SYSERR);	}	if (nammap(p, buf) != RFILSYS || (dev=open(NAMESPACE, p, "ro")) == SYSERR) {		fprintf(stderr, "cannot open %s\n", p);		freemem(buf, 512);		return(SYSERR);	}	while ( (len = read(dev, buf, 512)) > 0) {		for (p=buf ; p< &buf[512] ; p += d->d_rlen) {			d = (struct dirent *)p;			/* this could be a Vax or a Sun, so be */			/* prepared to swap integer fields     */			if (d->d_nlen != strlen(d->d_nam)) {			    d->d_nlen = net2hs(d->d_nlen);			    d->d_rlen = net2hs(d->d_rlen);			}						if (d->d_inum == 0)			  continue;			if (len < 512 ||			    d->d_nlen != strlen(d->d_nam) ||			    d->d_nlen > 255 ||			    d->d_rlen < sizeof(struct dirent) ||			    d->d_rlen > &buf[512] - p) {			    fprintf(stderr, "Not a directory\n");			    close(dev);			    freemem(buf, 512L);			    return(SYSERR);		        }			if (aflag || d->d_nam[0] != '.') {				strcpy(str, d->d_nam);				strcat(str, "\n");				write(stdout, str, strlen(str));			}			if (d->d_rlen == 0)			  break;		}	}	freemem(buf, 512);	close(dev);	return(OK);}

⌨️ 快捷键说明

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