我正在构建一个功能性的DNS服务器,需要一些帮助来完成它。目前我打开服务器并使用dig命令发送请求。问题是如何正确地回答它们。在此之前,我已经在内存中映射了一个包含域名和IP地址的文件(使用mmap),因此如果我收到任何有关本地地址的请求,我可以通过解析从链接列表中获取请求并提取所需信息的线程中的mmaped文件来回答它。我只是似乎找不到一个正确的方法。
下面是我的mmap代码:
感谢您的选择 :)
下面是我的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
感谢您的选择 :)
strtok
修改了被搜索的字符串,但该文件已使用PROT_READ
映射,这很可能是段错误的原因。对于这样的应用程序,使用mmap
没有太多优势,更好的选择是使用fgets
。另外,正如先前的评论中已经提到的,不断解析并不高效。只需解析文件一次(或每次更改时),然后每次使用该结果即可。 - kaylumstrtok
处理更改底层文件。 - kaylum