dirprt.c

来自「早期freebsd实现」· C语言 代码 · 共 108 行

C
108
字号
/*	@(#)dirprt.c	1.2 90/01/03 NFS Rev 2 Testsuite *	1.2 Lachman ONC Test Suite source"; */#include <sys/param.h>#ifndef major#include <sys/types.h>#endif#ifdef SVR3#include <dirent.h>#else#include <sys/dir.h>#endif#include <stdio.h>#include <ctype.h>main(argc, argv)	int argc;	char *argv[];{	argv++;	argc--;	while (argc--) {		print(*argv++);	}}print(dir)	char *dir;{	DIR *dirp;#ifdef SVR3	struct dirent *dp;#else	struct direct *dp;#endif	int rec = 0;	dirp = opendir(dir);	if (dirp == NULL) {		perror(dir);		return;	}	while ((dp = readdir(dirp)) != NULL) {#ifdef SVR3		printf("%5d %5ld %5d %s\n",		    telldir(dirp),dp->d_ino, dp->d_reclen,		    dp->d_name);#else		printf("%5d %5d %5d %5d %s\n",		    telldir(dirp),dp->d_fileno, dp->d_reclen,		    dp->d_namlen, dp->d_name);#endif	}	closedir(dirp);}#include <sys/stat.h>/* * open a directory. */DIR *opendir(name)	char *name;{	register DIR *dirp;	register int fd;	struct stat sb;	extern char *malloc();	if ((fd = open(name, 0)) == -1) {		printf("open failed\n");		return (NULL);	}	if (fstat(fd, &sb) == -1) {		printf("stat failed\n");		return (NULL);	}	if ((sb.st_mode & S_IFMT) != S_IFDIR) {		printf("not a directory\n");		return (NULL);	}	printf("%s mode %o dir %o\n", name, sb.st_mode, S_IFDIR);	if (((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) ||#ifdef SVR3	    ((dirp->dd_buf = malloc(DIRBUF)) == NULL)) {#else	    ((dirp->dd_buf = malloc((int)sb.st_blksize)) == NULL)) {#endif		if (dirp) {			if (dirp->dd_buf) {				free(dirp->dd_buf);			}			free(dirp);		}		close(fd);		return (NULL);	}#ifndef SVR3	dirp->dd_bsize = sb.st_blksize;	dirp->dd_bbase = 0;	dirp->dd_entno = 0;#endif	dirp->dd_fd = fd;	dirp->dd_loc = 0;	return (dirp);}

⌨️ 快捷键说明

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