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

📄 createtest.c

📁 lustre 1.6.5 source code
💻 C
字号:
#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <errno.h>#include <string.h>#ifndef S_SHIFT#define S_SHIFT 12#endifint usage(char *prog){	fprintf(stderr, "usage: %s <basename>\n", prog);	exit(1);}int main(int argc, char *argv[]){	char name[4096];	int i;	if (argc != 2)		usage(argv[0]);	umask(0);	for (i = 0; i <= S_IFMT; i += (1 << S_SHIFT)) {		struct stat st;		int mode = i | 0644;		int rc;		sprintf(name, "%s-mknod%06o", argv[1], mode);		rc = mknod(name, mode, 0x1234);		switch (i) {		case 0:			mode |= S_IFREG;		case S_IFREG:		case S_IFCHR: case S_IFBLK:			if (rc < 0 && getuid() != 0)				continue;		case S_IFSOCK: case S_IFIFO:			if (rc < 0) {				fprintf(stderr, "%s: ERROR mknod %s: %s\n",					argv[0], name, strerror(errno));				exit(10);			}			rc = stat(name, &st);			if (rc < 0) {				fprintf(stderr, "%s: ERROR stat %s: %s",					argv[0], name, strerror(errno));				exit(11);			}			if (st.st_mode != mode) {				fprintf(stderr, "%s: ERROR mode %s: %o != %o",					argv[0], name, st.st_mode, mode);				exit(12);			}			rc = unlink(name);			if (rc < 0) {				fprintf(stderr, "%s: ERROR unlink %s: %s",					argv[0], name, strerror(errno));				exit(13);			}			break;		default:			if (rc == 0) {				fprintf(stderr, "%s: ERROR: %s created\n",					argv[0], name);				exit(14);			}		}	}	for (i = 0; i <= S_IFMT; i += (1 << S_SHIFT)) {		struct stat st;		int mode;		int fd;		int rc;		mode = i | 0644;		sprintf(name, "%s-creat%06o", argv[1], mode);		fd = open(name, O_CREAT|O_RDONLY, mode);		if (fd < 0) {			fprintf(stderr, "%s: ERROR creat %s: %s\n",				argv[0], name, strerror(errno));			exit(21);		}		close(fd);		rc = stat(name, &st);		if (rc < 0) {			fprintf(stderr, "%s: ERROR stat %s: %s",				argv[0], name, strerror(errno));			exit(11);		}		if (!S_ISREG(st.st_mode & S_IFMT)) {			fprintf(stderr, "%s: ERROR mode %s: %o != %o",				argv[0], name, st.st_mode & S_IFMT, S_IFREG);			exit(12);		}		rc = unlink(name);		if (rc < 0) {			fprintf(stderr, "%s: ERROR unlink %s: %s\n",				argv[0], name, strerror(errno));			exit(20);		}	}	for (i = 0; i <= S_IFMT; i += (1 << S_SHIFT)) {		struct stat st;		int rc;		sprintf(name, "%s-mkdir%06o", argv[1], i | 0644);		rc = mkdir(name, i | 0664);		if (rc < 0) {			fprintf(stderr, "%s: ERROR mkdir %s: %s\n",				argv[0], name, strerror(errno));			exit(30);		}		rc = stat(name, &st);		if (rc < 0) {			fprintf(stderr, "%s: ERROR stat %s: %s",				argv[0], name, strerror(errno));			exit(11);		}		if (!S_ISDIR(st.st_mode)) {			fprintf(stderr, "%s: ERROR mode %s: %o != %o",				argv[0], name, st.st_mode & S_IFMT, S_IFDIR);			exit(12);		}		rc = rmdir(name);		if (rc < 0) {			fprintf(stderr, "%s: ERROR rmdir %s: %s\n",				argv[0], name, strerror(errno));			exit(31);		}	}	printf("%s: SUCCESS\n", argv[0]);	return 0;}

⌨️ 快捷键说明

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