解析内存映射文件C
Parsing memory mapped file C
我目前正在构建一个功能性的 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
谢谢:)
您正在使用 O_RDONLY
标志打开文件,并使用 PROT_READ
映射它 - 这一切都很好。
但是,请注意 strtok()
函数将修改其参数。
换句话说,您违背了永不写入 mmap 返回给您的内存位置的承诺。
解决方案是使用任何真正只读的内存例程。
我目前正在构建一个功能性的 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
谢谢:)
您正在使用 O_RDONLY
标志打开文件,并使用 PROT_READ
映射它 - 这一切都很好。
但是,请注意 strtok()
函数将修改其参数。
换句话说,您违背了永不写入 mmap 返回给您的内存位置的承诺。
解决方案是使用任何真正只读的内存例程。