pwd.c

来自「unix v7是最后一个广泛发布的研究型UNIX版本」· C语言 代码 · 共 81 行

C
81
字号
/* * Print working (current) directory */#include	<stdio.h>#include	<sys/param.h>#include	<sys/stat.h>#include	<sys/dir.h>char	dot[]	= ".";char	dotdot[] = "..";char	name[512];int	file;int	off	= -1;struct	stat	d, dd;struct	direct	dir;main(){	int rdev, rino;	stat("/", &d);	rdev = d.st_dev;	rino = d.st_ino;	for (;;) {		stat(dot, &d);		if (d.st_ino==rino && d.st_dev==rdev)			prname();		if ((file = open(dotdot,0)) < 0) {			fprintf(stderr,"pwd: cannot open ..\n");			exit(1);		}		fstat(file, &dd);		chdir(dotdot);		if(d.st_dev == dd.st_dev) {			if(d.st_ino == dd.st_ino)				prname();			do				if (read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) {					fprintf(stderr,"read error in ..\n");					exit(1);				}			while (dir.d_ino != d.st_ino);		}		else do {				if(read(file, (char *)&dir, sizeof(dir)) < sizeof(dir)) {					fprintf(stderr,"read error in ..\n");					exit(1);				}				stat(dir.d_name, &dd);			} while(dd.st_ino != d.st_ino || dd.st_dev != d.st_dev);		close(file);		cat();	}}prname(){	write(1, "/", 1);	if (off<0)		off = 0;	name[off] = '\n';	write(1, name, off+1);	exit(0);}cat(){	register i, j;	i = -1;	while (dir.d_name[++i] != 0);	if ((off+i+2) > 511)		prname();	for(j=off+1; j>=0; --j)		name[j+i+1] = name[j];	off=i+off+1;	name[i] = '/';	for(--i; i>=0; --i)		name[i] = dir.d_name[i];}

⌨️ 快捷键说明

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