ACE的文件操作
来源:互联网 发布:淘宝 杰胜体育 编辑:程序博客网 时间:2024/05/16 14:13
面是一个使用多种方法进行文件拷贝操作的例子:
// 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 的文件操作
- ACE里的文件操作
- ACE里的文件操作
- ACE文件操作
- ACE文件操作
- ACE文件操作
- ACE笔记(1)-ACE文件操作
- ACE笔记(10) -ACE文件操作
- 【风】的ACE笔记(10)-ACE文件操作(部分转载)
- 利用ACE的ACE_FILE类族进行文件操作
- ACE 的头文件包含
- ACE 的头文件包含
- 没了ACE后的字符串操作
- 使用ACE遍历目录下的文件
- ACE-ACE的安装
- ACE操作ini配置文件
- ACE操作配置文件
- 靠近我-刘润-出租司机给我上的MBA课
- 对IIS中的虚拟目录进行操作
- Dom4J-SaxReader 的用法(具体参考hibernate3的源代码)
- ASP.NET验证控件详解
- Bolster their spirits,distracted themselves.
- ACE的文件操作
- ASP.Net的Session
- ViewState初探
- 炎热的周末
- WINDOWS所有系统文件的用途
- 在Repeater控件中使用if语句(转自AfritXia)
- 如何在窗体和窗体之间传送数据
- Oracle中Sequence的一些知识点
- 用TreeView实现树菜单