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笔记(10) -ACE文件操作

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

ACE文件操作

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

ACE 的文件操作

下面是一个使用多种方法进行文件拷贝操作的例子:// 1、使用操作系统的函数进行逐个字符的拷贝. read/write/lseekint Slow_Read_Write_Test::run_test (...
  • DiaoShengjie
  • DiaoShengjie
  • 2006年05月23日 11:32
  • 804

ACE笔记(1)-ACE文件操作

        ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个...
  • eroswang
  • eroswang
  • 2007年08月23日 10:44
  • 7681

ACE里的文件操作

 ACE里的文件操作与平常的Win32里面的文件操作有所不同,这是因为ACE是为网络开发而设计的,里面普遍都遵循了Client/Server模式,这样在操作文件时,ACE把文件看做是一个Socket服...
  • bingozq
  • bingozq
  • 2008年03月21日 16:24
  • 585

ace admin sidebar menus代码备份

ace admin sidebar menus 代码速查
  • mika85489
  • mika85489
  • 2016年05月03日 15:14
  • 607

对ACE select的考虑

我在前面的代码里已经展示了使用传统select方式开发并发程序的简单流程和它的便利性。但是,和传统的CApis一样,它也有不方便和不安全的地方。首先fd_set是一个结构,靠着几个外部方法调整内部数据...
  • win2ks
  • win2ks
  • 2007年09月27日 16:51
  • 2097

ACE socket

使用ACE进行Socket编程,需要使用到下面几个类:     ACE_SOCK_Connector:连接器,主动建立连接,用于Socket Client;     ACE_SOCK_Accept...
  • u011305137
  • u011305137
  • 2014年08月28日 11:26
  • 554

ACE::init和ACE::fini

  前些日子做P2P客户端时,我用了ACE_Task,这个线程任务封装类,真的是很好用,以至于我做任务时,首先会考虑用它,不管使用什么线程模型(工作模式)。  不过,由于在做服务器时,经常要用到它,所...
  • mjp_mjp
  • mjp_mjp
  • 2009年08月03日 09:34
  • 3081

ACE Editor在线代码编辑器简介及使用引导

ACE 是一个开源的、独立的、基于浏览器的代码编辑器,可以嵌入到任何web页面或JavaScript应用程序中。ACE支持超过60种语言语法高亮,并能够处理代码多达400万行的大型文档。ACE开发团队...
  • sd4015700
  • sd4015700
  • 2015年11月18日 17:37
  • 7339
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE的文件操作
举报原因:
原因补充:

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