首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

有做ACE的么,一段程序看不懂,赐教啊该怎么解决

2012-06-14 
有做ACE的么,一段程序看不懂,赐教啊。。。书中原话下面的程序使用ACE_Mem_Map OO封装来映射一个通过命令行指

有做ACE的么,一段程序看不懂,赐教啊。。。
书中原话
下面的程序使用ACE_Mem_Map OO封装来映射一个通过命令行指定的文件,并将它的各行反向打印出来:

C/C++ code
#include <ace/OS.h>#include <ace/Mem_Map.h>static void putline (const char *s) //输出 s的一行, 为什么用静态函数?{    while (putchar (*s++) != '\n')        continue;}int main (int argc, char *argv[]){    char *filename = argv[1];    void *file_p=NULL;    ACE_Mem_Map mmap (filename);    if (mmap(file_p) != -1)     //括号操作符重载, MAP_FAILED是什么意思,define MAP_FAILED ((void *) -1)    {        char *file_pp=(char*)file_p;        size_t size = mmap.size () - 1;        if (file_pp[size] == '\0')            file_pp[size] = '\n';        while (--size >= 0)            if (file_pp[size] == '\n')                putline (file_pp + size + 1);        putline (file_pp);// 没看懂怎么实现各行反向打印出来        return 0;    }    else        return 1;}


求指教

[解决办法]
if (mmap(file_p) != -1) 
{
char *file_pp=(char*)file_p;
size_t size = mmap.size () - 1;
if (file_pp[size] == '\0')
file_pp[size] = '\n';
while (--size >= 0)
if (file_pp[size] == '\n')
putline (file_pp + size + 1);
putline (file_pp);// 没看懂怎么实现各行反向打印出来
return 0;
}

=======================================
while (--size >= 0)
if (file_pp[size] == '\n')
putline (file_pp + size + 1);

等价于
while (--size >= 0 && file_pp[size] == ''\n)
putline(file_pp + size + 1);

就是说反向移动下标直到这个下标所指向的字符为\n时,打印这一行。比如aaa\nbbb\n,从程序开始运行算起的话,现在打印bbb,然后重复这个过程,直到最后只剩第一行这个边界条件,程序的最后一行文本的第一行结束这个条件。
[解决办法]
linux编程不会?

SYNOPSIS
#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags,
int fd, off_t offset);
int munmap(void *addr, size_t length);

RETURN VALUE
On success, mmap() returns a pointer to the mapped area. On error, the value MAP_FAILED (that is, (void *) -1) is returned, and errno is set appropri-
ately. On success, munmap() returns 0, on failure -1, and errno is set (probably to EINVAL).

热点排行