在CentOS6.2下安装DNS服务软件Bind并快速配置简单实例

[实践Ok]在CentOS6.2下安装DNS并快速配置实例,共八步,心路历程如下:
背景介绍:
在日常的开发中,往往会在测试机和外网的Http的Url实际接口是不一样的,在测试机一个Url地址,在外网中又是一个地址。
这样在我们在开发时,在上线时就会去修改一下接口,在线下测试时用线下的Url接口,最后的情况是,在SVN的管理中会变得
很混乱,也就是在上线上的版本和线下测试的版本在改动上来回切换,版本号不段的切换,为此,为了解决这个问题,必须引入
自己建立一套内网测试系统的DNS来实现其和外网一样的环境,进而在实际开发中就不会出现因URL的接口包含的不同域名而导致
了代码版本管理的版本号不段攀升。

实际操作:
在Linux下尤其是CentOS这样的免费系统上有Yum这样的包管理工具来安DNS服务器,但是我在实践中发现其并不理想,可能是打出的Rpm包多少有些
不太让人满意,我试过用直接运行:yum install bind bind-utils bind-libs bind-chroot caching-nameserver,但后来在配置DNS时出现这样那样的问题.
找不到配置文件?(loading from master file 225.168.192.in-add.arpa failed: file not found)我X,什么权限问题都试了,但就是搞不定,于是否,
改用源码安装,这样来得更保险此些,操控性也强很多,有人问我,你的人生由谁来操盘:我操!

我的上手安装和配置如下:
一:开始安装DNS服务器Bind:
下载 bind  http://www.isc.org,解压bind-9.9.1-P1.tar.gz。
tar -zxvf bind-9.9.1-P1.tar.gz
进入 bind-9.9.1-P1.tar.gz文件夹
cd bind-9.9.1-P1
创建安装目录,我是安装在 /usr/local/named
mkdir /usr/local/named
编译,指定安装目录,指定man目录,开启多线程支持(测试环境也就没有必要搞多线程了,要整看帮助。)
./configure --prefix=/usr/local/named
Make 大约需要几分钟,只要不报错就继续下去。
make
Make install 安装
make install
没有报错,就表示安装成功了。
创建以下目录以备用
mkdir /usr/local/named/namedb

二:开始配置bind
创建 rndc.conf文件,用bind自带程序生成
cd /usr/local/named/
sbin/rndc-confgen > etc/rndc.conf   //一直死在这儿了,只得强制终止。
查原因,在网上搜索:linux安装dns,rndc-confgen没反应,哈,有一篇文章说到点上了,
Url:http://www.nginxs.com/linux/43.html,他说是,摘录如下:
在官方网站上看到这么一条信息
You must use the keyboard to create entropy, since your system is lacking
/dev/random (or equivalent)

start typing:
rndc-confgen: generate key: out of entropy

大概意思就是服务器上没有random产生器,这种情况下我们就手动伪造一个文件代替/dev/random的功能
###新建一个 random 文件随即输入一串数字“记得要长~~
shell $> vim random
asdkfjalsjdflajsldfjlasjdflajsldfjalsjdflajslfjalsjflasjfl
###查看 rndc-confgen 帮助
shell $> ../sbin/rndc-confgen –help
rndc-confgen: invalid argument –
Usage:
rndc-confgen [-a] [-b bits] [-c keyfile] [-k keyname] [-p port] [-r randomfile] [-s addr] [-t chrootdir] [-u user]
  -a:           generate just the key clause and write it to keyfile (/usr/local/named/etc/rndc.key)
  -b bits:      from 1 through 512, default 128; total length of the secret
  -c keyfile:   specify an alternate key file (requires -a)
  -k keyname:   the name as it will be used  in named.conf and rndc.conf
  -p port:      the port named will listen on and rndc will connect to
  -r randomfile: a file containing random data
  -s addr:      the address to which rndc should connect
  -t chrootdir: write a keyfile in chrootdir as well (requires -a)
  -u user:      set the keyfile owner to “user” (requires -a)
view plaincopy to clipboardprint?
  1. shell $> ../sbin/rndc-confgen -r random > rndc.key   
,上面这一句是核心,自己整个Random文件是桥梁。
tail -10 rndc.key | head -9 | sed 's/# //g' > named.conf
把这个named.conf放在etc的文件夹子下:/usr/local/named/etc/named.conf。
ok 问题解决了,接下来我们配置 我们的 域名服务器吧。

三:配置篇
编辑named.conf
# vi  /usr/local/named/etc/named.conf
写入以下内容:我的Ip:192.168.225.128 ,注意:225.168.192.in-add.arpa是Ip的反解,刚好倒过来。
view plaincopy to clipboardprint?
  1. key "rndc-key" {   
  2.   algorithm hmac-md5;   
  3.   secret "SnK8Ph1zCAnnykZ07qt+TQ==";   
  4. };   
  5.   
  6. controls {   
  7.   inet 127.0.0.1 port 953   
  8.     allow { 127.0.0.1; } keys { "rndc-key"; };   
  9. };   
  10.   
  11. options {   
  12.   Directory "/usr/local/named";   
  13.   Pid-file "named.pid";   
  14.   Allow-query { any ;};   
  15.   Dump-file "/usr/local/named/data/cache_dump.db";   
  16.   Statistics-file "/usr/local/named/data/named_stats.txt";   
  17. };   
  18. Zone "localhost" in {   
  19.   Type master;   
  20.   File "localhost.zone";   
  21. };   
  22. Zone "0.0.127.in-addr.arpa" in {   
  23.   Type master;   
  24.   File "localhost.rev";   
  25. };   
  26.   
  27. zone "51test.com" {   
  28.       type master;   
  29.       file "51test.com.zone";   
  30. };zone "225.168.192.in-add.arpa" IN {   
  31.         type master;   
  32.          file "225.168.192.in-add.arpa";   
  33. };   
  34.   


退出,保存。
创建并编辑 localhost.zone 文件
vi  /usr/local/named/localhost.zone
写入以下内容:
  1. $TTL 3600   
  2. $ORIGIN 127.0.0.1.   
  3. @  1D IN SOA localhost. root.localhost. (   
  4.                      42         ;   
  5.                      3H         ;   
  6.                      15M        ;   
  7.                      1W         ;   
  8.                      3600);   
  9.    1D IN NS  127.0.0.1   
  10.    1D IN A   127.0.0.1   
  11.   


创建并编辑 localhost.rev 文件
# vi /usr/local/named/localhost.rev
  1. $TTL 3600   
  2. @  IN SOA  localhost.  root.localhost. (   
  3.               1; serial   
  4.               3600; refresh every hour   
  5.               900;  retry every 15 minutes   
  6.               3600000; expire 1000 hours   
  7.               3600); minimun 1 hour   
  8.    IN NS localhost.   
  9. 1  IN PTR localhost.   
  10.   


因前面在,51test.com这个是在其他网页上抄过来的简单示例,于是也就顺便把文件也贴上:
vi  /usr/local/named/51test.com.zone
  1. $TTL 86400   
  2. @        IN        SOA        www.51test.com.  root.localhost (   
  3.                         2 ; serial   
  4.                         28800 ; refresh   
  5.                         7200 ; retry   
  6.                         604800 ; expire   
  7.                         86400 ; ttl   
  8.                         )   
  9.         IN      NS      www.51test.com.   
  10.   
  11. www      IN      A       192.168.225.128   
  12. admin     IN      A      192.168.225.128   
  13.   


再不是51test.com的反解配置文件:
vi /usr/local/named/225.168.192.in-add.arpa
  1. $TTL    86400   
  2. @       IN      SOA     51test.com.  root.51test.com.  (   
  3.                                       1997022700 ; Serial   
  4.                                       28800      ; Refresh   
  5.                                       14400      ; Retry   
  6.                                       3600000    ; Expire   
  7.                                       86400 )    ; Minimum   
  8. @         IN      NS      51test.com.   
  9. 128       IN      PTR    www.51test.com.   
  10. 128       IN      PTR    admin.51test.com.   
  11.   

配置注意事项:
配置文件中的 "@" 符号前不能有任何空白字符
配置文件中的 "IN" 字符前必须有空格或TAB
到此,配置大功告成。

四:
下载一个named.root 到/usr/local/named/下
ftp://ftp.rs.internic.net/domain/named.root
Ftp失效,从这儿下载:
http://www.smth.edu.cn/bbsgcon.php?board=FreeBSD&num=1209
特别注意:bind的配置文档是区分大小写的,因现在那个FTP好像下载不了,于是我也贴下面。
vi /usr/local/named/named.ca
view plaincopy to clipboardprint?
  1. more named.root   
  2. ; This file holds the information on root name servers needed to   
  3. ; initialize cache of Internet domain name servers   
  4. ; (e.g. reference this file in the "cache . <file>"   
  5. ; configuration file of BIND domain name servers).   
  6. ;   
  7. ; This file is made available by InterNIC   
  8. ; under anonymous FTP as   
  9. ; file /domain/named.root   
  10. ; on server FTP.INTERNIC.NET   
  11. ;   
  12. ; last update: Nov 5, 2002   
  13. ; related version of root zone: 2002110501   
  14. ;   
  15. ;   
  16. ; formerly NS.INTERNIC.NET   
  17. ;   
  18. . 3600000 IN NS A.ROOT-SERVERS.NET.   
  19. A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4   
  20. ;   
  21. ; formerly NS1.ISI.EDU   
  22. ;   
  23. . 3600000 NS B.ROOT-SERVERS.NET.   
  24. B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107   
  25. ;   
  26. ; formerly C.PSI.NET   
  27. ;   
  28. . 3600000 NS C.ROOT-SERVERS.NET.   
  29. C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12   
  30. ;   
  31. ; formerly TERP.UMD.EDU   
  32. ;   
  33. . 3600000 NS D.ROOT-SERVERS.NET.   
  34. D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90   
  35. ;   
  36. ; formerly NS.NASA.GOV   
  37. ;   
  38. . 3600000 NS E.ROOT-SERVERS.NET.   
  39. E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10   
  40. ;   
  41. ; formerly NS.ISC.ORG   
  42. ;   
  43. . 3600000 NS F.ROOT-SERVERS.NET.   
  44. F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241   
  45. ;   
  46. ; formerly NS.NIC.DDN.MIL   
  47. ;   
  48. . 3600000 NS G.ROOT-SERVERS.NET.   
  49. G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4   
  50. ;   
  51. ; formerly AOS.ARL.ARMY.MIL   
  52. ;   
  53. . 3600000 NS H.ROOT-SERVERS.NET.   
  54. H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53   
  55. ;   
  56. ; formerly NIC.NORDU.NET   
  57. ;   
  58. . 3600000 NS I.ROOT-SERVERS.NET.   
  59. I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17   
  60. ;   
  61. ; operated by VeriSign, Inc.   
  62. ;   
  63. . 3600000 NS J.ROOT-SERVERS.NET.   
  64. J.ROOT-SERVERS.NET. 3600000 A 192.58.128.30   
  65. ;   
  66. ; housed in LINX, operated by RIPE NCC   
  67. ;   
  68. . 3600000 NS K.ROOT-SERVERS.NET.   
  69. K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129   
  70. ;   
  71. ; operated by IANA   
  72. ;   
  73. . 3600000 NS L.ROOT-SERVERS.NET.   
  74. L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12   
  75. ;   
  76. ; housed in Japan, operated by WIDE   
  77. ;   
  78. . 3600000 NS M.ROOT-SERVERS.NET.   
  79. M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33   
  80. ; End of File   
  81.   


五:运行Bind程序,如下方式加载配置文件启动,加上调试信息参数:

如果运行结果最后一行显示Running
表明安装并启动成功。

最后需要注意的内容是不要忘了是否真正的开启服务器端口(以下是named.conf文件中端口的设置语句,可以看到端口号是 53:telnet x.x.x.x 53)
当然也可以用:nmap localhost ,没有yum安装,这种小工具问题不大用yum来做。
yum install nmap
Total download size: 2.3 M
Installed size: 7.5 M
Is this ok [y/N]: y
Downloading Packages:
root@192.168.225.128:/usr/local/named# nmap localhost
Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-18 03:09 CST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000033s latency).
Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1
Not shown: 994 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
111/tcp  open  rpcbind
3306/tcp open  mysql
9000/tcp open  cslistener

端口号是 53就是DNS Bind的端口。

六:停止及启动:
root@192.168.225.128:/usr/local/named# ps aux|grep name
root     19024  0.0  1.2  10624  6216 pts/0    T    03:00   0:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf
root@192.168.225.128:/usr/local/named# kill -9 19024
root@192.168.225.128:/usr/local/named# ps aux|grep name
[2]+  已杀死               /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf

七:本机测试,外部机器测试是否dns生效:
vi /etc/resolv.conf
加上,去掉注释其他Dns的Ip值:
nameserver 192.168.225.128
启动Dns后,清楚Bind服务器上的Dns缓存:
root@192.168.225.128:/usr/local/named# ./sbin/rndc flush

root@192.168.225.128:/usr/local/named# ping www.51test.com
PING www.51test.com (192.168.225.128) 56(84) bytes of data.
64 bytes from 192.168.225.128: icmp_seq=1 ttl=64 time=0.025 ms
64 bytes from 192.168.225.128: icmp_seq=2 ttl=64 time=0.058 ms

八:将服务设置为开机自启,把named 添加到启动项,随操作系统一起启动即可:

但是,我们现在是源码的安装,So,得这样子喔。
修改来自Apache里的启动shell(参看一下自启动的标准),也可以不用修改,直接如下也成,内容如下:

1)保存为/etc/init.d/dns
脚本执行权限添加:
2)chmod -R a+x /etc/init.d/dns  //env: /etc/init.d/dns: 权限不够 ,必须给加上。
3)把脚本拷贝至/etc/init.d/目录下,执行命令:
ln -s /etc/init.d/dns /etc/rc.d/rc3.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc4.d/S61dns
ln -s /etc/init.d/dns /etc/rc.d/rc5.d/S61dns
再执行:
chkconfig --add dns  //解释:相当于Windows下的自动启动服务,特别要注意:chkconfig –add dns的时候,出现dns服务不支持chkconfig。
如果想让服务支持chkconfig,必须定义服务的启动级,启动优先级,关闭优先级,还有描述,如上,必须得加上描述等。
chkconfig --levels dns345 on //也成
开机启动设置完毕:
service dns start
-----------------------------------------------

下次一开机也就会运行这个脚本,以启动自己定义的Dns服务器。
  1. reboot   

启动后,查看是否自己就启动了呢?如下:
  1. root@192.168.225.128:~# ps aux|grep named   
  2. root      1272  0.0  1.1  10232  5680 ?        S    05:20   0:00 /usr/local/named/sbin/named -gc /usr/local/named/etc/named.conf   
  3. root      2039  0.0  0.1   5956   756 pts/0    S+   05:22   0:00 grep named   

果然,又启动起来了,大功告成,整完收工。
Dns服务器从安装到调试配置并测试完成,Eof。Write and Opt  By:jackxiang 2012/06/17 20:30:00


后来,我自己配置了一个新的域名:naimanqi.com.cn ,我的Linux机器IP是:192.168.1.105
修改配置文件:
1)共用如下:
view plaincopy to clipboardprint?
  1. options {   
  2.         Directory "/usr/local/named";   
  3.         Pid-file "named.pid";   
  4.         Allow-query { any ;};   
  5.         Dump-file "/usr/local/named/data/cache_dump.db";   
  6.         Statistics-file "/usr/local/named/data/named_stats.txt";   
  7. };   
  8. 2)添加如下两个正向解析和反向解析的配置文件:   

view plaincopy to clipboardprint?
  1. vi  /usr/local/named/etc/named.conf   
  2.   
  3. zone "naimanqi.com.cn" {   
  4.       type master;   
  5.       file "naimanqi.com.cn.zone";   
  6. };zone "1.168.192.in-add.arpa" IN {   
  7.         type master;   
  8.          file "1.168.192.in-add.arpa";   
  9. };   


3)反向解析文件:
view plaincopy to clipboardprint?
  1. vi /usr/local/named/1.168.192.in-add.arpa   
  2. $TTL    86400   
  3. @       IN      SOA     naimanqi.com.cn.  root.naimanqi.com.cn.  (   
  4.                                       1997022700 ; Serial   
  5.                                       28800      ; Refresh   
  6.                                       14400      ; Retry   
  7.                                       3600000    ; Expire   
  8.                                       86400 )    ; Minimum   
  9. @         IN      NS      naimanqi.com.cn.   
  10. 128       IN      PTR    www.naimanqi.com.cn.   
  11. 128       IN      PTR    admin.naimanqi.com.cn.   

4)正向解析的文件:
view plaincopy to clipboardprint?
  1. vi  /usr/local/named/naimanqi.com.cn.zone   
  2.   
  3. $TTL 86400   
  4. @        IN        SOA        naimanqi.com.cn.  root.localhost (   
  5.                         2 ; serial   
  6.                         28800 ; refresh   
  7.                         7200 ; retry   
  8.                         604800 ; expire           
  9.                         86400 ; ttl   
  10.                         )   
  11.         IN      NS      naimanqi.com.com.   
  12.   
  13.          IN      A       192.168.1.105   
  14. www      IN      A       192.168.1.105   
  15. admin     IN      A      192.168.1.105   

注意这一行:          IN      A       192.168.1.105
这个目的是把浏览器访问:naimanqi.com.cn这个域名也给解析到IP: 192.168.1.105上来,跟在后面的www  IN      A       192.168.1.105 这个是对www解析的,其实它是一个二级域名和admin 这种二级域名是一个意思:admin     IN      A      192.168.1.105 。。。EOF。

最后,可以这样玩这个DNS,这个CentOs6.3的Linux 不是建立在这个NAT下的嘛,后修改为Bridge(桥连),这样后,反正是在一个网段内(路由器下),把自己外网的这台Windows下的机器的DNS由192.168.1.1修改为:192.168.1.105,这样既可以调试刚才配置的内部DNS进行调试,也可 以访问外网,为什么呢?是因为:
view plaincopy to clipboardprint?
  1. C:\Documents and Settings\Administrator>nslookup justwinit.cn   
  2. DNS request timed out.   
  3.     timeout was 2 seconds.   
  4. *** Can't find server name for address 192.168.1.105: Timed out   
  5. *** Default servers are not available   
  6. Server:  UnKnown   
  7. Address:  192.168.1.105   
  8.   
  9. Non-authoritative answer:   
  10. Name:    justwinit.cn   
  11. Address:  72.46.128.86   

是因,内部DNS没有找到那个地址后,它自动转给上一级DNS去了,后得到那个外部网站的IP地址了。但修改为NAT后,好像启动Centos里的DNS后,再在Windows上修改IP为桥连后的IP好像DNS解析不了,在Linux自己修改 /etc/resolve.conf后是可以的,所以,建议用桥连方式来开发,少用NAT方式,这样可以在一个路由器下的电脑都可以配置上这个Dns来访问该网站和开发网部(samba),很是方便,而DNS设置后,如果没有这个网站在内网,它便会访问外网,这种机制也是很好的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模拟动态分区分配

介绍 list.h #ifndef _List_h_ #define _List_h_#include "Data.h"//******* 链表 *******// Status InitLinkList(LinkList *L); void PCBAssign(PCBType *e1, PCBType e2); Status GetElemt_L(LinkList L,int i,PCBType *e); Status ListIn…

python模块(4)-Collections

collections1.collection.counter(list)2.collections.defaultdict()3.collection.dequecollections是Python内建的一个集合模块&#xff0c;提供了许多有用的集合类。collections在python官方文档中的解释是High-performance container datatypes1.collection.counter(list) …

js知识点汇总

1.本门课的作用&#xff08;JavaScript的作用&#xff09;所有基于Web的程序开发基础 2.一种计算机客户端脚本语言&#xff0c;主要在Web浏览器解释执行。 3.浏览器中Javascript&#xff0c;用于与用户交互&#xff0c;以及实现页面中各种动态特效 4.在HTML文件中&#xff0…

redis——内存概述

Redis通过自己的方法管理内存,&#xff0c;主要方法有zmalloc(),zrealloc()&#xff0c; zcalloc()和zfree(), 分别对应C中的malloc(), realloc()、 calloc()和free()。相关代码在zmalloc.h和zmalloc.c中。 Redis自己管理内存的好处主要有两个&#xff1a;可以利用内存池等手段…

Windows下如何用C语言清空特定文件夹中的所有文件

#include "iostream.h" //由于该博客系统发布是不能显示正常&#xff0c;代码如需调试&#xff0c;只需将改成""即可 #include "string.h" #include "stdlib.h" #include "time.h" #include "math.h" #include…

MachineLearning(5)-去量纲:归一化、标准化

去量纲&#xff1a;归一化、标准化1.归一化(Normalization)1.1 Min-Max Normalization1.2 非线性Normalization2.标准化(Standardlization)2.1 Z-score Normalization3.标准化在梯度下降算法中的重要性本博文为葫芦书《百面机器学习》阅读笔记。去量纲化 可以消除特征之间量纲的…

GDB调试技术(一)

启动GDB的方法有以下几种: 1、gdb <program> program也就是你的执行文件,一般在当然目录下。 2、gdb <program> core 用gdb同时调试一个运行程序和core文件,core是程序非法执行后core dump后产生的文件。 3、

GDB调试技术(二)

1) 恢复程序运行和单步调试 当程序被停住了,你可以用continue命令恢复程序的运行直到程序结束,或下一个断点到来。也可以使用step或next命令单步跟踪程序。 continue [ignore-count] c [ignore-count] fg [ignore-count] 恢复程序运行,直到程序结束,或是下一个断点到…

关于Java中String的问题

String 对象的两种创建方式&#xff1a; String str1 "abcd";//先检查字符串常量池中有没有"abcd"&#xff0c;如果字符串常量池中没有&#xff0c;则创建一个&#xff0c;然后 str1 指向字符串常量池中的对象&#xff0c;如果有&#xff0c;则直接将 st…

学点数学(3)-函数空间

函数空间1.距离&#xff1a;从具体到抽象2.范数3.内积4.拓扑本博文为观看《上海交通大学公开课-数学之旅-函数空间 》所整理笔记&#xff0c;公开课视频连接&#xff1a;http://open.163.com/newview/movie/free?pidM8PTB0GHI&midM8PTBUHT0数学中的空间 是 大家研究工作的…

Makefile编写详解--项目开发

预备知识&#xff1a; gcc 的3个参数&#xff1a; 1. -o 指定目标文件 gcc sources/main.c -o bin/main 2. -c 编译的时候只生产目标文件不链接 gcc -c sources/main.c -o obj/main.o 3. -I 主要指定头文件的搜索路径 gcc -I headers -c main.c -o main.o 4. -l 指定静…

如何判断对象已经死亡

引用计数 给对象中添加一个引用计数器&#xff0c;每当有一个地方引用它&#xff0c;计数器就加 1&#xff1b;当引用失效&#xff0c;计数器就减 1&#xff1b;任何时候计数器为 0 的对象就是不可能再被使用的。 这个方法实现简单&#xff0c;效率高&#xff0c;但是目前主流…

XML常见的操作

1. 创建XML文档 &#xff08;1&#xff09;创建一个XML文档非常简单&#xff0c;其流程如下&#xff1a; ① 用xmlNewDoc函数创建一个文档指针doc。 ② 用xmlNewNode函数创建一个节点指针root_node。 ③ 用xmlDocSetRootElement将root_node设置为doc的根结点。…

算法(2)-二叉树的遍历(递归/迭代)python实现

二叉树的遍历1.深度优先DFS1.1 DFS 递归解法1.1.1先序遍历1.1.2中序遍历1.1.3后序遍历1.2 DFS迭代解法1.2.1先序遍历1.2.2中序遍历1.2.3后序遍历2.广度优先BFS3.二叉树的最大深度3.1递归3.2迭代4.翻转二叉树4.1递归4.1迭代5.合并两棵二叉树5.1递归5.2迭代有两种通用的遍历树的策…

libxml的安装和相关数据结构详解

1安装 一般如果在安装系统的时候选中了libxml开发库的话&#xff0c;系统会默认安装。如果没有安装&#xff0c;可以按如下步骤进行手工安装。 ① 从xmlsoft站点或ftp(ftp.xmlsoft.org)站点下载libxml压缩包 (libxml2-xxxx.tar.gz) ② 对压缩包进行解压缩 tar xvzf …

内核中的 likely() 与 unlikely()

在 2.6 内核中&#xff0c;随处可以见到 likely() 和 unlikely() 的身影&#xff0c;那么为什么要用它们&#xff1f;它们之间有什么区别&#xff1f; 首先要明确&#xff1a; if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value) 也就是说 likely()…

python外卷(12)-sort(),sorted(),ord(),chr()

Python内置函数1.sort()&#xff0c;sorted()2.ord(), chr()1.sort()&#xff0c;sorted() sort() 是list的方法&#xff0c;对已经存在的列表进行操作&#xff0c;无返回值 a[3,2,4,1] b["c","a","b"] print (a.sort(),b.sort()) # 输出 (Non…

利用posix_fadvise清理系统中的文件缓存

利用posix_fadvise清理系统中的文件缓存leoncom c/c,unix2011-08-03当我们需要对某段读写文件并进行处理的程序进行性能测试时&#xff0c;文件会被系统cache住从而影响I/O的效率&#xff0c;必须清理cache中的对应文件的才能正确的进行性能测试。通常清理内存可以采用下面的这…

空间分配

目前主流的垃圾收集器都会采用分代回收算法&#xff0c;因此需要将堆内存分为新生代和老年代&#xff0c;这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。 大多数情况下&#xff0c;对象在新生代中 eden 区分配。当 eden 区没有足够空间进行分配时&#xff0c;虚拟…

关于uint32_t uint8_t uint64_t 的问题

怎么又是u又是_t的?u代表的是unsigned相信大家都知道,那么_t又是什么呢?我认为它就是一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是其它数据类型。 uint8_t,uint16_t,uint32_t等都不是什么新的数据类型,它们只是使用typedef给类型起…