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

📄 utime.c

📁 lustre 1.6.5 source code
💻 C
字号:
/* * Simple test for validating mtime on a file create and set via utime. */#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <unistd.h>#include <time.h>#include <string.h>#include <utime.h>#include <errno.h>void usage(char *prog){	fprintf(stderr, "usage: %s <filename> [-s <filename>]\n", prog);	exit(1);}int main(int argc, char *argv[]){	long before_mknod, after_mknod;	const char *prog = argv[0];        const char *filename = argv[1];        char *secname = NULL;        struct utimbuf utb;	struct stat st, st2;	int rc;        int c;	utb.actime = 200000;	utb.modtime = 100000;        while ((c = getopt(argc, argv, "s:")) != -1) {                switch(c) {                case 's':                        secname = optarg;                        break;                default:		        usage(argv[0]);                }        }	if (optind + 1 > argc)		usage(argv[0]);	/* Adjust the before time back one second, because the kernel's	 * CURRENT_TIME (lockless clock reading, used to set inode times)	 * may drift against the do_gettimeofday() time (TSC-corrected and	 * locked clock reading, used to return timestamps to user space).	 * This means that the mknod time could be a second older than the	 * before time, even for a local filesystem such as ext3.	 */	before_mknod = time(0) - 1;	rc = mknod(filename, 0700, S_IFREG);	after_mknod = time(0);	if (rc && errno != EEXIST) {		fprintf(stderr, "%s: mknod(%s) failed: rc %d: %s\n",			prog, filename, errno, strerror(errno));		return 2;	} else if (!rc) {		rc = stat(filename, &st);		if (rc) {			fprintf(stderr, "%s: stat(%s) failed: rc %d: %s\n",				prog, filename, errno, strerror(errno));			return 3;		}		if (st.st_mtime < before_mknod || st.st_mtime > after_mknod) {			fprintf(stderr,				"%s: bad mknod times %lu <= %lu <= %lu false\n",				prog, before_mknod, st.st_mtime, after_mknod);			return 4;		}		printf("%s: good mknod times %lu%s <= %lu <= %lu for %s\n",		       prog, before_mknod, before_mknod == st.st_mtime ? "*":"",		       st.st_mtime, after_mknod, filename);                if (secname) {                        sleep(1);                        rc = stat(secname, &st2);                        if (rc) {                                fprintf(stderr, "%s: stat(%s) failed: rc %d: "                                        "%s\n", prog, secname, errno,                                        strerror(errno));                                return 5;                        }                        if (st2.st_mtime < before_mknod ||                             st2.st_mtime > after_mknod) {                                fprintf(stderr, "%s: bad mknod times %lu <= %lu"                                        " <= %lu false\n", prog, before_mknod,                                        st2.st_mtime, after_mknod);                                return 6;                        }                        printf("%s: good mknod times %lu%s <= %lu <= %lu "                               "for %s\n", prog, before_mknod,                                before_mknod == st.st_mtime ? "*":"",                                st2.st_mtime, after_mknod, secname);                }	}	/* See above */	rc = utime(filename, &utb);	if (rc) {		fprintf(stderr, "%s: utime(%s) failed: rc %d: %s\n",			prog, filename, errno, strerror(errno));		return 7;	}        	rc = stat(filename, &st);	if (rc) {		fprintf(stderr, "%s: second stat(%s) failed: rc %d: %s\n",			prog, filename, errno, strerror(errno));		return 8;	}	if (st.st_mtime != utb.modtime ) {		fprintf(stderr, "%s: bad utime mtime %lu should be  %lu\n",			prog, st.st_mtime, utb.modtime);		return 9;	}	if (st.st_atime != utb.actime ) {		fprintf(stderr, "%s: bad utime atime %lu should be  %lu\n",			prog, st.st_atime, utb.actime);		return 10;	}	printf("%s: good utime mtimes %lu, atime %lu\n",	       prog, utb.modtime, utb.actime);        if (secname == NULL)                return 0;                /* Checking that times in past get updated on another client. */	rc = stat(secname, &st2);        if (rc) {		fprintf(stderr, "%s: second stat(%s) failed: rc %d: %s\n",			prog, secname, errno, strerror(errno));		return 12;	}	if (st2.st_mtime != st.st_mtime) {		fprintf(stderr, "%s: not synced mtime between clients: %lu "                        "should be  %lu\n", prog, st2.st_mtime, st.st_mtime);		return 13;	}	if (st2.st_ctime != st.st_ctime) {		fprintf(stderr, "%s: not synced ctime between clients: %lu "                        " should be  %lu\n", prog, st2.st_ctime, st.st_ctime);		return 14;	}	        printf("%s: updated times for %s\n", prog, secname);        	return 0;}

⌨️ 快捷键说明

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