这个是什么搜索算法

[复制链接]
617|4
手机看帖
扫描二维码
随时随地手机跟帖
limee|  楼主 | 2019-7-20 10:40 | 显示全部楼层 |阅读模式
void searchfile(const char *filename, int fd, const unsigned char *value, const unsigned char *mask, int len)
{
    off_t offset = 0;
    unsigned char buf[1024];

    len--;

    while (1)
    {
        int r;

        memmove(buf, buf + sizeof(buf) - len, len);
        r = read(fd, buf + len, sizeof(buf) - len);

        if (r < 0)
        {
            perror("read");
            return;
        } else if (!r)
            return;

        int o, i;
        for (o = offset ? 0 : len; o < r; ++o)
        {
            for (i = 0; i <= len; ++i)
                if ((buf[o + i] & mask[i]) != value[i])
                    break;
            if (i > len)
            {
                unsigned long long pos = (unsigned long long)(offset + o - len);
                printf("%s: %08llx\n", filename, pos);
                if (bytes_before || bytes_after)
                    dump_context(fd, pos);
            }
        }

        offset += r;

    }
}

使用特权

评论回复

相关帖子

limee|  楼主 | 2019-7-20 10:41 | 显示全部楼层
for (;bytes_to_read;)
这句什么含义?相当于while(1)???

使用特权

评论回复
zxa198610| | 2019-7-21 15:18 | 显示全部楼层

使用特权

评论回复
masmin| | 2019-7-23 13:10 | 显示全部楼层
limee 发表于 2019-7-20 10:41
for (;bytes_to_read;)
这句什么含义?相当于while(1)???

若bytes_to_read为真,执行 for(),否则,不执行。

使用特权

评论回复
zuanAY| | 2019-7-23 18:00 | 显示全部楼层
收藏学习

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

301

主题

475

帖子

0

粉丝