test_io.cpp
来自「最新的版本ACE-5.6.8,刚从外文网上搬下,与大家分享.」· C++ 代码 · 共 212 行
CPP
212 行
// $Id: test_io.cpp 81978 2008-06-16 16:57:12Z sowayaa $
// Test program for different methods of copying files.
#include "ace/OS_NS_stdio.h"
#include "ace/OS_NS_unistd.h"
#include "ace/ACE.h"
#include "ace/Profile_Timer.h"
#include "ace/Get_Opt.h"
#include "ace/Signal.h"
#include "ace/Log_Msg.h"
#include "IO_Test.h"
ACE_RCSID(IO_tests, test_io, "$Id: test_io.cpp 81978 2008-06-16 16:57:12Z sowayaa $")
#if !defined(_WIN32)
// Name of program.
static const ACE_TCHAR *program_name;
// Name of default input file.
static const ACE_TCHAR *input_filename = ACE_TEXT ("/usr/dict/words");
// Name of default output file.
static const ACE_TCHAR *output_filename = ACE_TEXT ("/tmp/foo");
// Check if removing output file upon completion...
static int remove_output = 1;
// Count of the number of iterations to run the tests.
static int iteration_count = 100;
// Profiler used to keep track of file I/O time.
static ACE_Profile_Timer profile_timer;
// Explain usage and exit.
static void
print_usage_and_die (void)
{
ACE_OS::fprintf (stderr, "usage: %s"
" [-i input_file] [-o output_file] [-n iteration_count] [-r]\n",
ACE_TEXT_ALWAYS_CHAR (program_name));
ACE_OS::exit (1);
}
// Clean up the output file on exit from a signal.
extern "C" void
cleanup (int = 0)
{
if (remove_output)
ACE_OS::unlink (output_filename);
ACE_OS::exit (0);
}
// Parse the command-line arguments and set options.
static void
parse_args (int argc, ACE_TCHAR *argv[])
{
ACE_Get_Opt get_opt (argc, argv, ACE_TEXT ("i:n:o:r"));
for (int c; ((c = get_opt ()) != -1); )
switch (c)
{
case 'i':
input_filename = get_opt.opt_arg ();
break;
case 'n':
iteration_count = ACE_OS::atoi (get_opt.opt_arg ());
break;
case 'o':
output_filename = get_opt.opt_arg ();
break;
case 'r':
remove_output = 0;
break;
default:
print_usage_and_die ();
break;
}
}
// Vector of pointers to derived classes that inherit from IO_Test
// base class.
static IO_Test *test_vector[100];
static int
run_tests (int iterations, FILE *input_fp, FILE *output_fp)
{
int i = 0;
ACE_NEW_RETURN (test_vector[i],
Stdio_Test ("Stdio_Test",
profile_timer),
-1);
i++;
ACE_NEW_RETURN (test_vector[i],
Block_Fread_Fwrite_Test ("Block_Fread_Fwrite_Test",
profile_timer),
-1);
i++;
ACE_NEW_RETURN (test_vector[i],
Block_Read_Write_Test ("Block_Read_Write_Test",
profile_timer),
-1);
i++;
ACE_NEW_RETURN (test_vector[i],
Mmap1_Test ("Mmap1_Test",
profile_timer),
-1);
i++;
ACE_NEW_RETURN (test_vector[i],
Mmap2_Test ("Mmap2_Test",
profile_timer),
-1);
i++;
ACE_NEW_RETURN (test_vector[i],
Slow_Read_Write_Test ("Slow_Read_Write_Test",
profile_timer),
-1);
i++;
test_vector[i] = (IO_Test *) 0;
for (i = 0; test_vector[i] != 0; i++)
{
ACE_HANDLE hfile = fileno (output_fp);
if (ACE_OS::ftruncate (hfile, 0) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%s\n"),
ACE_TEXT ("ftruncate")),
-1);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("--------------------\n")
ACE_TEXT ("starting %C for %d iterations(s):\n"),
test_vector[i]->name (),
iterations));
test_vector[i]->run_test (iterations,
input_fp,
output_fp);
ACE_Profile_Timer::ACE_Elapsed_Time et;
profile_timer.elapsed_time (et);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("wallclock time = %f, user time = %f, system time = %f\n"),
et.real_time,
et.user_time,
et.system_time));
delete test_vector[i];
}
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("--------------------\n")));
return 0;
}
int
ACE_TMAIN(int argc, ACE_TCHAR *argv[])
{
program_name = ACE::basename (argv[0],
ACE_DIRECTORY_SEPARATOR_CHAR);
parse_args (argc, argv);
ACE_Sig_Action sa ((ACE_SignalHandler) cleanup, SIGINT);
ACE_UNUSED_ARG (sa);
FILE *input_fp =
ACE_OS::fopen (input_filename, ACE_TEXT ("r"));
FILE *output_fp =
ACE_OS::fopen (output_filename, ACE_TEXT ("w+"));
if (input_fp == 0)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
input_filename),
-1);
if (output_fp == 0)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
output_filename),
-1);
ACE_OS::unlink (output_filename);
if (run_tests (iteration_count,
input_fp,
output_fp) == -1)
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("run_tests")),
-1);
if (ACE_OS::fclose (input_fp) == -1
|| ACE_OS::fclose (output_fp) == -1)
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"), ACE_TEXT ("fclose")),
-1);
cleanup ();
return 0;
}
#else
int ACE_TMAIN (int, ACE_TCHAR*[]) {
// not supported on win32
return 0;
}
#endif
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?