ACE的文件操作

转载 2006年05月22日 16:14:00

面是一个使用多种方法进行文件拷贝操作的例子:

// 1、使用操作系统的函数进行逐个字符的拷贝. read/write/lseek

int
Slow_Read_Write_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
ACE_HANDLE ifd = fileno (input_fp);
ACE_HANDLE ofd = fileno (output_fp);

this->tm_.start ();

while (--iterations >= 0)
{
char c;

while (ACE_OS::read (ifd, &c, sizeof c) > 0)
::write (ofd, &c, sizeof c);

ACE_OS::lseek (ifd, 0, SEEK_SET);
ACE_OS::lseek (ofd, 0, SEEK_SET);
}

this->tm_.stop ();
return 0;
}

// 2. 使用标准C函数进行逐字符拷贝. getc/putc/rewind

int
Stdio_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
this->tm_.start ();

while (--iterations >= 0)
{
int c;

while ((c = getc (input_fp)) != EOF)
putc (c, output_fp);

ACE_OS::rewind (input_fp);
ACE_OS::rewind (output_fp);
}
this->tm_.stop ();
return 0;
}

// 3. 块读取. read/write/lseek

int
Block_Read_Write_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
int ifd = fileno (input_fp);
int ofd = fileno (output_fp);

this->tm_.start ();

while (--iterations >= 0)
{
char buf[BUFSIZ];
ssize_t n;

while ((n = ACE_OS::read (ifd,
buf,
sizeof buf)) > 0)
::write (ofd, buf, n);

ACE_OS::lseek (ifd, 0, SEEK_SET);
ACE_OS::lseek (ofd, 0, SEEK_SET);
}

this->tm_.stop ();
return 0;
}

// 4. fread/fwrite/lseek

int
Block_Fread_Fwrite_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
this->tm_.start ();

while (--iterations >= 0)
{
char buf[BUFSIZ];
ssize_t n;

while ((n = ACE_OS::fread (buf,
1,
sizeof buf,
input_fp)) != 0)
::fwrite (buf, n, 1, output_fp);

ACE_OS::rewind (input_fp);
ACE_OS::rewind (output_fp);
}

this->tm_.stop ();
return 0;
}

// 5. 使用内存映射文件打开输入文件,使用write 进行文件写操作

int
Mmap1_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
ACE_Mem_Map map_input (fileno (input_fp));
void *src = map_input.addr ();

if (src == MAP_FAILED)
ACE_ERROR_RETURN ((LM_ERROR,
"%s",
this->name ()),
-1);
else
{
this->tm_.start ();

while (--iterations >= 0)
{
if (ACE_OS::write (fileno (output_fp),
src,
map_input.size ()) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"%s",
this->name ()),
-1);
ACE_OS::lseek (fileno (output_fp),
0,
SEEK_SET);
}

this->tm_.stop ();
}

if (map_input.unmap () == -1)
ACE_ERROR_RETURN ((LM_ERROR,
"%s",
this->name ()),
-1);
else
return 0;
}

// 6. 使用内存映射文件打开输入、输出文件, 使用memcpy 进行文件内容的拷贝

int
Mmap2_Test::run_test (int iterations,
FILE *input_fp,
FILE *output_fp)
{
ACE_Mem_Map map_input (fileno (input_fp));
int size = map_input.size ();
ACE_Mem_Map map_output (fileno (output_fp),
size,
PROT_WRITE,
MAP_SHARED);
void *src = map_input.addr ();
void *dst = map_output.addr ();

if (src == MAP_FAILED || dst == MAP_FAILED)
return -1;
else
{
this->tm_.start ();

while (--iterations >= 0)
ACE_OS::memcpy (dst, src, size);

this->tm_.stop ();
}

if (map_input.unmap () == -1
|| map_output.unmap () == -1)
return -1;
else
return 0;
}

相关文章推荐

ACE文件操作

ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服务...

ACE对文件操作方法

下面是一个使用多种方法进行文件拷贝操作的例子: // 1、使用操作系统的函数进行逐个字符的拷贝. read/write/lseek int Slow_Read_Write_Test::...

利用ACE的ACE_FILE类族进行文件操作

ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服务...

CIni配置文件操作

  • 2017年11月19日 22:59
  • 116KB
  • 下载

基于文件操作的留言系统

  • 2017年11月09日 23:05
  • 2KB
  • 下载

基本文件操作之常用命令和工具(vi、find)

基本文件操作之常用命令和工具 1、文件编辑工具 vi

CSV文件操作

  • 2016年06月28日 16:47
  • 1KB
  • 下载

Linux下的文件操作应用

  • 2015年05月16日 16:14
  • 545KB
  • 下载

第13周项目6-体验文件操作(5)工资排序

/* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 *完成日期:2014年11月...
  • Annpion
  • Annpion
  • 2014年11月25日 13:00
  • 384

文件操作和网络编程实验

  • 2015年05月10日 13:40
  • 37KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE的文件操作
举报原因:
原因补充:

(最多只允许输入30个字)