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

📄 rndrm00.c

📁 mtd-utils 是一套更改linux mtd設備的工具
💻 C
字号:
/* * Copyright (C) 2007 Nokia Corporation. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA * * Author: Adrian Hunter */#include <unistd.h>#include <stdlib.h>#include <stdio.h>#include <string.h>#include <stdint.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <errno.h>#include "tests.h"void rndrm00(void){	int64_t repeat;	int64_t size, this_size;	pid_t pid;	char dir_name[256];	/* Create a directory to test in */	pid = getpid();	tests_cat_pid(dir_name, "rndrm00_test_dir_", pid);	if (chdir(dir_name) == -1)		CHECK(mkdir(dir_name, 0777) != -1);	CHECK(chdir(dir_name) != -1);	/* Repeat loop */	repeat = tests_repeat_parameter;	size = 0;	for (;;) {		/* Create and remove sub-dirs and small files, */		/* but tending to grow */		do {			if (tests_random_no(3)) {				this_size = tests_create_entry(NULL);				if (!this_size)					break;				size += this_size;			} else {				this_size = tests_remove_entry();				size -= this_size;				if (size < 0)					size = 0;				if (!this_size)					this_size = 1;			}		} while (this_size &&			(tests_size_parameter == 0 ||			size < tests_size_parameter));		/* Create and remove sub-dirs and small files, but */		/* but tending to shrink */		do {			if (!tests_random_no(3)) {				this_size = tests_create_entry(NULL);				size += this_size;			} else {				this_size = tests_remove_entry();				size -= this_size;				if (size < 0)					size = 0;			}		} while ((tests_size_parameter != 0 &&			size > tests_size_parameter / 10) ||			(tests_size_parameter == 0 && size > 100000));		/* Break if repeat count exceeded */		if (tests_repeat_parameter > 0 && --repeat <= 0)			break;		/* Sleep */		if (tests_sleep_parameter > 0) {			unsigned us = tests_sleep_parameter * 1000;			unsigned rand_divisor = RAND_MAX / us;			unsigned s = (us / 2) + (rand() / rand_divisor);			usleep(s);		}	}	/* Tidy up by removing everything */	tests_clear_dir(".");	CHECK(chdir("..") != -1);	CHECK(rmdir(dir_name) != -1);}/* Title of this test */const char *rndrm00_get_title(void){	return "Randomly create and remove directories and files";}/* Description of this test */const char *rndrm00_get_description(void){	return		"Create a directory named rndrm00_test_dir_pid, where " \		"pid is the process id.  Within that directory, " \		"randomly create and remove " \		"a number of sub-directories and small files, " \		"but do more creates than removes. " \		"When the total size of all sub-directories and files " \		"is greater than the size specified by the size parameter, " \		"start to do more removes than creates. " \		"The size parameter is given by the -z or --size option, " \		"otherwise it defaults to 1000000. " \		"A size of zero fills the file system until there is no "		"space left. " \		"The task repeats, sleeping in between each iteration. " \		"The repeat count is set by the -n or --repeat option, " \		"otherwise it defaults to 1. " \		"A repeat count of zero repeats forever. " \		"The sleep value is given by the -p or --sleep option, " \		"otherwise it defaults to 0. "		"Sleep is specified in milliseconds.";}int main(int argc, char *argv[]){	int run_test;	/* Set default test size */	tests_size_parameter = 1000000;	/* Set default test repetition */	tests_repeat_parameter = 1;	/* Set default test sleep */	tests_sleep_parameter = 0;	/* Handle common arguments */	run_test = tests_get_args(argc, argv, rndrm00_get_title(),			rndrm00_get_description(), "znp");	if (!run_test)		return 1;	/* Change directory to the file system and check it is ok for testing */	tests_check_test_file_system();	/* Do the actual test */	rndrm00();	return 0;}

⌨️ 快捷键说明

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