解析内存映射文件C

时间:2015-11-23 02:01:24

标签: c mmap strtok

我目前正在构建功能性DNS服务器,我需要一些帮助来完成它。目前我打开服务器并使用dig命令我能够发送我的请求。问题是如何正确回答它们。在我在内存中映射包含域名及其IP的文件(使用mmap)之前,如果我收到有关本地地址的任何请求,我只需通过解析mmaped文件来回答它从链接列表获取请求并提取所需信息的线程。我似乎无法找到正确的方法。

我将在下面留下我的mmap代码:

void mmap_localdns(){
    int ldns;
    char *data;
    struct stat size;
    ldns=open("localdns.txt", O_RDONLY);
    stat("localdns.txt", &size);
    data = mmap((caddr_t)0, size.st_size, PROT_READ, MAP_SHARED, ldns, 0);
    close(ldns);
    printf("%s", data);

    char *pch;
    pch = strtok(&data, " ");

    while(pch != NULL){
        printf("%s\n", pch);
        pch = strtok(NULL, " ");
    }
    //munmap(data, size.st_size);
}

尝试使用strtok()但它一直给我一个分段错误。也许它不是最好的解决方案:/

我正在谈论的文件遵循以下规则:

mywebserver.so.local 192.168.1.20
fileserver.so.local 192.168.1.10
ww5.so.local 192.168.1.5

谢谢:)

1 个答案:

答案 0 :(得分:2)

您正在使用O_RDONLY标记打开文件,并使用PROT_READ对其进行mmap - 这一切都很好。 但是,请注意strtok()函数将修改其参数。 换句话说,您违背了承诺,永远不会写入mmap返回给您的内存位置。

解决方案是使用任何真正只读的内存例程。