ACE 的文件操作

转载 2006年05月23日 11:32: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
  • 823

ACE文件操作

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

ACE的文件操作

面是一个使用多种方法进行文件拷贝操作的例子:// 1、使用操作系统的函数进行逐个字符的拷贝. read/write/lseekint Slow_Read_Write_Test::run_test (i...
  • DNCS
  • DNCS
  • 2006年05月22日 16:14
  • 2019

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
  • 608

对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,一个C++的框架

ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework),在其中实现了许多用于并发通信软件的核心...
  • fuyuehua22
  • fuyuehua22
  • 2014年01月05日 17:57
  • 4364

ACE前台框架的使用心得1—TABLE 表格的使用

1.html页面中定义table 其中的table(grid-table)代表的是表格;id为g...
  • ZJJ_xionghaizi
  • ZJJ_xionghaizi
  • 2016年12月19日 15:18
  • 2250
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ACE 的文件操作
举报原因:
原因补充:

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