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

📄 rmdir.c

📁 Linux.Programming.by example 的源代码绝对经典
💻 C
字号:
/* * Remove directory */#include <sys/types.h>#include <sys/dir.h>#include <sys/stat.h>#include <stdio.h>int	Errors = 0;char	*rindex();char	*strcat();char	*strcpy();main(argc,argv)int argc;char **argv;{	if(argc < 2) {		fprintf(stderr, "rmdir: arg count\n");		exit(1);	}	while(--argc)		rmdir(*++argv);	exit(Errors!=0);}rmdir(d)char *d;{	int	fd;	char	*np, name[500];	struct	stat	st, cst;	struct	direct	dir;	strcpy(name, d);	if((np = rindex(name, '/')) == NULL)		np = name;	if(stat(name,&st) < 0) {		fprintf(stderr, "rmdir: %s non-existent\n", name);		++Errors;		return;	}	if (stat("", &cst) < 0) {		fprintf(stderr, "rmdir: cannot stat \"\"");		++Errors;		exit(1);	}	if((st.st_mode & S_IFMT) != S_IFDIR) {		fprintf(stderr, "rmdir: %s not a directory\n", name);		++Errors;		return;	}	if(st.st_ino==cst.st_ino &&st.st_dev==cst.st_dev) {		fprintf(stderr, "rmdir: cannot remove current directory\n");		++Errors;		return;	}	if((fd = open(name,0)) < 0) {		fprintf(stderr, "rmdir: %s unreadable\n", name);		++Errors;		return;	}	while(read(fd, (char *)&dir, sizeof dir) == sizeof dir) {		if(dir.d_ino == 0) continue;		if(!strcmp(dir.d_name, ".") || !strcmp(dir.d_name, ".."))			continue;		fprintf(stderr, "rmdir: %s not empty\n", name);		++Errors;		close(fd);		return;	}	close(fd);	if(!strcmp(np, ".") || !strcmp(np, "..")) {		fprintf(stderr, "rmdir: cannot remove . or ..\n");		++Errors;		return;	}	strcat(name, "/.");	if((access(name, 0)) < 0) {		/* name/. non-existent */		strcat(name, ".");		goto unl;	}	strcat(name, ".");	if((access(name, 0)) < 0)		/* name/.. non-existent */		goto unl2;	if(access(name, 02)) {		name[strlen(name)-3] = '\0';		fprintf(stderr, "rmdir: %s: no permission\n", name);		++Errors;		return;	}unl:	unlink(name);	/* unlink name/.. */unl2:	name[strlen(name)-1] = '\0';	unlink(name);	/* unlink name/.  */	name[strlen(name)-2] = '\0';	if (unlink(name) < 0) {		fprintf(stderr, "rmdir: %s not removed\n", name);		++Errors;	}}

⌨️ 快捷键说明

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