dt.h

来自「Linux磁盘测试的源代码,测试磁盘的读写性能」· C头文件 代码 · 共 1,265 行 · 第 1/3 页

H
1,265
字号
#elif defined(SCO)#  define CDROM_NAME	"cdrom"		/* Start of CD-ROM device name.	*/#  define RCDROM_NAME	"rcdrom"	/* Start of raw CD-ROM names.	*/#elif defined(_NT_SOURCE)#  define CDROM_NAME	"Cdrom"		/* Start of CD-ROM device name.	*/#  define RCDROM_NAME	"cdrom"		/* Allow both upper/lowercase.	*/#else#  define CDROM_NAME	"rz"		/* Start of CD-ROM device name.	*/#  define RCDROM_NAME	"rrz"		/* Start of raw CD-ROM names.	*/#endif /* !defined(_QNX_SOURCE) */#if defined(AIX)#  define DISK_NAME	"hd"		/* Start of disk device names.	*/#  define RDISK_NAME	"rhd"		/* Start of raw disk names.	*/#elif defined(_QNX_SOURCE)#  define DISK_NAME	"hd"		/* Start of disk device names.	*/#  define RDISK_NAME	"hd"		/* Start of raw disk names.	*/#elif defined(sun) || defined(__linux__)#  define DISK_NAME	"sd"		/* Start of disk device names.	*/#  define RDISK_NAME	"rsd"		/* Start of raw disk names.	*//* NOTE: Linux (RedHat V6.0) currently has no raw disk names! */#elif defined(SCO) || defined(HP_UX)#  define DISK_NAME	"dsk"		/* Start of disk device names.	*/#  define RDISK_NAME	"rdsk"		/* Start of raw disk names.	*/#elif defined(_NT_SOURCE)#  define DISK_NAME	"PhysicalDrive"	/* Start of disk device names.	*/#  define RDISK_NAME	"physicaldrive"	/* Allow both upper/lowercase.	*/#else#  define DISK_NAME	"rz"		/* Start of disk device names.	*/#  define RDISK_NAME	"rrz"		/* Start of raw disk names.	*/#endif /* !defined(_QNX_SOURCE) */#if defined(_QNX_SOURCE)#  define TTY_NAME	"ser"		/* Start of terminal names.	*/#elif defined(__NUTC__)#  define TTY_NAME	"com"		/* Start of terminal names.	*/#else /* !defined(_QNX_SOURCE) */#  define TTY_NAME	"tty"		/* Start of terminal names.	*/#endif /* defined(_QNX_SOURCE) */#define TTY_LEN		3		/* Length of terminal name.	*/#if defined(_QNX_SOURCE)#  define TAPE_NAME	"tpr"		/* Start of tape device names.	*/#  define NTAPE_NAME	"tp"		/* No-rewind tape device name.	*/#elif defined(sun)#  define TAPE_NAME	"rst"		/* Start of tape device names.	*/#  define NTAPE_NAME	"nrst"		/* No-rewind tape device name.	*/#elif defined(__linux__)#  define TAPE_NAME	"st"		/* Start of tape device names.	*/#  define NTAPE_NAME	"nst"		/* No-rewind tape device name.	*/#elif defined(SCO)#  define TAPE_NAME	"ctape"		/* Start of tape device names.	*/#  define NTAPE_NAME	"ntape"		/* No-rewind tape device name.	*/#elif defined(_NT_SOURCE)#  define TAPE_NAME	"rmt"		/* Start of tape device names.	*/#  define NTAPE_NAME	"nrmt"		/* No-rewind tape device name.	*/#else#  define TAPE_NAME	"rmt"		/* Start of tape device names.	*/#  define NTAPE_NAME	"nrmt"		/* No-rewind tape device name.	*/#endif /* !defined(_QNX_SOURCE) */#define DEF_LOG_BUFSIZE	2048		/* Large enough for all stats.	*/#if defined(BUFSIZ) && (BUFSIZ > DEF_LOG_BUFSIZE)#  define LOG_BUFSIZE	BUFSIZ		/* The log file buffer size.	*/#else /* !defined(BUFSIZ) */#  define LOG_BUFSIZE	DEF_LOG_BUFSIZE	/* The log file buffer size.	*/#endif /* defined(BUFSIZ) */#define ANY_RADIX	0		/* Any radix string conversion.	*/#define DEC_RADIX	10		/* Base for decimal conversion.	*/#define HEX_RADIX	16		/* Base for hex str conversion.	*//* * Define some Architecture dependent types: */#if defined(__alpha) || defined(__LP64__)typedef unsigned long		ptr_t;typedef int			int32;typedef unsigned int		u_int32;typedef unsigned int		bool;typedef volatile unsigned int	v_bool;#else /* !defined(__alpha) */typedef unsigned int		ptr_t;#if !defined(AIX)#if !defined(OSFMK)typedef int			int32;#endif /* !defined(OSFMK) */typedef unsigned int		u_int32;#endif /* !defined(AIX) */typedef unsigned char		bool;typedef volatile unsigned char	v_bool;#endif /* defined(__alpha) *//* * Some systems don't have these definitions: */#if defined(__MSDOS__)typedef	unsigned char		u_char;typedef	unsigned short		u_short;typedef	unsigned int		u_int;typedef unsigned long		u_long;typedef char *			caddr_t;typedef unsigned long		daddr_t;#endif /* defined(_QNX_SOURCE) */#if defined(ultrix) || defined(sun)#if !defined(SOLARIS) && !defined(AIX)typedef int			ssize_t;#endif /* !defined(SOLARIS) && !defined(AIX) */#endif /* defined(ultrix) *//* * The buffer pad bytes are allocated at the end of all data buffers, * initialized with the inverted data pattern, and then checked after * each read operation to ensure extra bytes did not get transferred * at the end of buffer.  This test is necessary, since quite often * we've seen data corruption (extra bytes) due to improper flushing * of DMA FIFO's, or other coding errors in our SCSI/CAM sub-system. */#define PADBUFR_SIZE	sizeof(u_int32)	/* The data buffer pad size.	*/					/* MUST match pattern length!!!	*//* * The buffer rotate size are used to force unaligned buffer access * by rotating the starting buffer address through the sizeof(ptr). * This feature has been very useful in forcing drivers through special * code to handle unaligned addresses & buffers crossing page boundaries. */#define ROTATE_SIZE	sizeof(char *)	/* Forces through all ptr bytes	*//* * 'dt' specific exit status codes: */#define END_OF_FILE	254			/* End of file code.	*/#define FATAL_ERROR	255			/* Fatal error code.	*/#define get_lbn(bp)	( ((u_int32)bp[3] << 24) | ((u_int32)bp[2] << 16) | \			  ((u_int32)bp[1] << 8) | (u_int32)bp[0])/* * Structure for Baud Rate Lookup. */struct tty_baud_rate {	u_int32	usr_speed;		/* User entered speed value.	*/	speed_t	tty_speed;		/* Parameter for tty driver.	*/};enum opt {OFF, ON, OPT_NONE};enum flow {FLOW_NONE, CTS_RTS, XON_XOFF};enum stats {COPY_STATS, READ_STATS, RAW_STATS, WRITE_STATS, TOTAL_STATS, VERIFY_STATS};enum dispose {DELETE_FILE, KEEP_FILE};enum file_type {INPUT_FILE, OUTPUT_FILE};enum test_mode {READ_MODE, WRITE_MODE};enum onerrors {ABORT, CONTINUE};enum iodir {FORWARD, REVERSE};enum iomode {COPY_MODE, TEST_MODE, VERIFY_MODE};enum iotype {SEQUENTIAL_IO, RANDOM_IO};enum logLevel {	logLevelCrit = -1,	logLevelError,	logLevelInfo,	logLevelWarn,	logLevelDiag,	logLevelQdiag,	logLevelLog,	logLevelSpecial,	logLevelTrace};/* * Flags to control print behaviour: */#define PRT_NOFLUSH	0x01#define PRT_NOIDENT	0x02#define PRT_NOLEVEL	0x04/* * Declare the external test functions: * * TODO:  Tape test functions... */#define NOFUNC		(int (*)()) 0	/* No test function exists yet. */#define NoFd		-1		/* No file descriptor open.	*/extern int nofunc();			/* Stub return (no test func).	*/extern struct dtfuncs generic_funcs;	/* Generic test functions.	*/#if defined(AIO)extern struct dtfuncs aio_funcs;	/* POSIX AIO test functions.	*/#endif /* defined(AIO) */#if defined(MMAP)extern struct dtfuncs mmap_funcs;	/* Memory map test functions.	*/#endif /* defined(MMAP) */extern struct dtfuncs tty_funcs;	/* Terminal test functions.	*/#if defined(FIFO)extern struct dtfuncs fifo_funcs;	/* Named pipes test functions.	*/#endif /* defined(FIFO) *//* * Define various device types: */enum devtype {DT_AUDIO, DT_BLOCK, DT_CHARACTER, DT_COMM, DT_DISK,	      DT_GRAPHICS, DT_MEMORY, DT_MMAP, DT_MOUSE, DT_NETWORK,	      DT_FIFO, DT_PIPE, DT_PRINTER, DT_PROCESSOR, DT_REGULAR,	      DT_SOCKET, DT_SPECIAL, DT_STREAMS, DT_TAPE, DT_TERMINAL,	      DT_UNKNOWN };struct dtype {	char	*dt_type;	enum	devtype dt_dtype;};extern struct dtype *input_dtype;extern struct dtype *output_dtype;/* * Define file control flags: */#define DCF_ACTIVE	1		/* File test is active.		*//************************************************************************ * NOTE: Eventually, all device specific data must be moved to this	* *	 data structure, but that will be done in stages since there's	* *	 a fair amount of work involved.  Can you say re-write? :-)	* ************************************************************************//* * Define device type information: */typedef struct dinfo {	int	di_fd;			/* The file descriptor.		*/	int	di_flags;		/* The file control flags.	*/	int	di_oflags;		/* The last file open flags.	*/	char	*di_dname;		/* The /dev device name.	*/	char	*di_device;		/* The real device name.	*/	enum test_mode di_mode;		/* The current test mode.	*/	enum file_type di_ftype;	/* The file access type.	*/	struct dtype *di_dtype;		/* The device type information.	*/	struct dtfuncs *di_funcs;	/* The test functions to use.	*/	/*	 * Statistics and State Information:	 */	bool	di_closing;		/* The device is being closed.	*/	u_int32	di_dsize;		/* The device block size.	*/	large_t	di_capacity;		/* The device capacity (blocks)	*/volatile off_t	di_offset;		/* The device/file offset.	*/	v_int	di_errno;		/* The last errno encountered.	*/	v_bool	di_end_of_file;		/* End of file was detected.	*/	v_bool	di_end_of_logical;	/* End of logical tape detected	*/	v_bool	di_end_of_media;	/* End of media was detected.	*/	bool	di_eof_processing;	/* End of file proessing.	*/	bool	di_eom_processing;	/* End of media processing.	*/	bool	di_random_io;		/* Random I/O selected flag.	*/	bool	di_random_access;	/* Random access device flag.	*/	v_large	di_dbytes_read;		/* Number of data bytes read.	*/	v_large	di_dbytes_written;	/* Number of data bytes written.*/	v_large	di_fbytes_read;		/* Number of file bytes read.	*/	v_large	di_fbytes_written;	/* Number of file bytes written.*/	v_large	di_vbytes_read;		/* Number of volume bytes read.	*/	v_large	di_vbytes_written;	/* Number of volume bytes wrote.*/	vu_long	di_files_read;		/* Number of tape files read.	*/	vu_long	di_files_written;	/* Number of tape files written.*/	vu_long	di_records_read;	/* Number of records read.	*/	vu_long	di_records_written;	/* Number of records written.	*/	vu_long	di_volume_records;	/* Number of volume records.	*/	vu_long di_read_errors;		/* Number of read errors.	*/	vu_long di_write_errors;	/* Number of write errors.	*/	large_t	di_data_limit;		/* The data limit (in bytes).	*/	large_t	di_volume_bytes;	/* Accumulated volume bytes.	*/	/*	 * Extended Error Information (EEI) State:	 */	bool	di_proc_eei;		/* Processing EEI data flag.	*/#if defined(EEI)#define EEI_RESET	1		/* Delay after resets.		*/#define EEI_SLEEP	3		/* Time between retries.	*/#define EEI_RETRIES	100		/* Number of EEI retries.	*/#define EEI_OPEN_RETRIES 3		/* Number of open retries.	*/	bool	di_devpath_failure;	/* Path failure condition.	*/	bool	di_reset_condition;	/* Reset condition detected.	*/	struct mtget *di_mt;		/* The tape error information.	*/	int	di_eei_retries;		/* The number of EEI retries.	*/	int	di_eei_sleep;		/* Time to sleep between retry.	*/#endif /* defined(EEI) */} dinfo_t;/* * Define test function dispatch structure: * * [ NOTE:  These functions are not all used at this time.  The intent *   is to cleanup the code later by grouping functions appropriately. ] */struct dtfuncs {						/* Open device or file.	   */	int	(*tf_open)(struct dinfo	*dip, int oflags);						/* Close device or file.   */	int	(*tf_close)(struct dinfo *dip);						/* Special initilization.  */	int	(*tf_initialize)(struct dinfo *dip);						/* Start test processing.  */	int	(*tf_start_test)(struct dinfo *dip);						/* End of test processing. */	int	(*tf_end_test)(struct dinfo *dip);						/* Read file data.	   */	int	(*tf_read_file)(struct dinfo *dip);						/* Processes read data.	   */	int	(*tf_read_data)(struct dinfo *dip);						/* Cancel read requests.   */	int	(*tf_cancel_reads)(struct dinfo *dip);						/* Write file data.	   */	int	(*tf_write_file)(struct dinfo *dip);						/* Processes write data.   */	int	(*tf_write_data)(struct dinfo *dip);						/* Cancel write requests.  */	int	(*tf_cancel_writes)(struct dinfo *dip);						/* Flush data to media.	   */	int	(*tf_flush_data)(struct dinfo *dip);						/* Verify data read.	   */	int	(*tf_verify_data)(	struct dinfo	*dip,					u_char		*buffer,					size_t		count,					u_int32		pattern,					u_int32		*lba );						/* Reopen device or file.  */	int	(*tf_reopen_file)(struct dinfo *dip, int oflags);						/* Test startup handling.  */	int	(*tf_startup)(struct dinfo *dip);						/* Test cleanup handling.  */	int	(*tf_cleanup)(struct dinfo *dip);						/* Validate test options.  */	int	(*tf_validate_opts)(struct dinfo *dip);};/* * Macros to Improve Performance: * * Note: Others can be added after debug is conditionalized. */#define INLINE_FUNCS 1#if defined(INLINE_FUNCS)#define make_lba(dip, pos)	\	((pos == (off_t) 0) ? (u_int32) 0 : (pos / lbdata_size))#define make_offset(dip, lba)	((off_t)(lba * lbdata_size))#define make_lbdata(dip, pos)	\	((pos == (off_t) 0) ? (u_int32) 0 : (pos / lbdata_size))#define make_position(dip, lba)	((off_t)(lba * lbdata_size))#if defined(_BSD)#  define get_position(dip) (seek_position (dip, (off_t) 0, L_INCR))#else /* !defined(_BSD) */#  define get_position(dip) (seek_position (dip, (off_t) 0, SEEK_CUR))#endif /* defined(_BSD) */#endif /* defined(INLINE_FUNCS) */#if defined(MUNSA)extern bool		munsa_flag;		/* Enable MUNSA features flag. */extern dlm_lock_mode_t	munsa_lock_type;	/* Default munsa lock type.    */extern dlm_lock_mode_t	input_munsa_lock_type;	/* Lock for input file.        */extern dlm_lock_mode_t	output_munsa_lock_type;	/* Lock for output file.       */extern char		*resnam;extern int		resnlen, i;extern dlm_lkid_t	lkid;extern dlm_nsp_t	nsp;extern dlm_valb_t	vb;#endif /* defined(MUNSA) */extern FILE *efp, *ofp;extern struct dinfo *active_dinfo, *input_dinfo, *output_dinfo;#if defined(AIX)#  undef hz#endifextern clock_t hz;extern bool tty_saved;extern int errno, exit_status;extern unsigned parity_code, data_bits_code;extern speed_t baud_rate;extern u_int32 pattern;extern u_int32 data_patterns[];extern int npatterns;extern enum opt softcar_opt;extern enum flow flow_type;extern enum iodir io_dir;extern enum iomode io_mode;extern enum iotype io_type;extern enum dispose dispose_mode;extern enum devtype device_type;extern enum onerrors oncerr_action;extern char *parity_str, *flow_str, *speed_str;extern bool user_pattern, unique_pattern;extern char *pattern_string, *prefix_string;extern int align_offset, rotate_offset;extern bool ade_flag, aio_flag, bypass_flag;extern bool compare_flag, core_dump, cerrors_flag;extern bool debug_flag, Debug_flag, eDebugFlag, rDebugFlag;#if defined(EEI)extern bool eei_flag, eei_resets;#endif /* defined(EEI) */extern bool dump_flag, flush_flag, forked_flag, fsync_flag, header_flag;extern bool keep_existing, hazard_flag, user_incr, user_min, user_max;extern bool lbdata_flag, user_lbdata, user_lbsize;extern bool user_position, incr_pattern, iot_pattern, logdiag_flag;extern bool loopback, micro_flag, mmap_flag, modem_flag, stdin_flag, stdout_flag;extern bool max_capacity, media_changed, multi_flag, variable_flag, volumes_flag;extern bool terminating_flag, ttyport_flag, verbose_flag, verify_flag, verify_only;

⌨️ 快捷键说明

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