Networking
為什麼對 /etc/hosts 的更改會立即生效?
對
/etc/hosts
文件的更改似乎立即生效。我對實現感到好奇。使用什麼魔法來實現這個功能?
神奇的是打開
/etc/hosts
文件並讀取它:strace -e trace=file wget -O /dev/null http://www.google.com http://www.facebook.com http://unix.stackexchange.com 2>&1 | grep hosts open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4 open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 5 open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 4
該
getaddrinfo(3)
函式是唯一/etc/hosts
的標準名稱解析介面,每次呼叫它來解析主機名時都會打開並讀取。未使用標準
getaddrinfo(3)
但仍以某種方式添加/etc/hosts
到混合中的更複雜的應用程序(例如dnsmasq
DNS 伺服器)可能會inotify(7)
用於監視文件的更改/etc/hosts
並僅在需要時重新讀取它。瀏覽器和其他此類應用程序不會這樣做。
/etc/hosts
他們將在每次需要解析主機名時打開並讀取,即使他們沒有直接使用 libc 的解析器,而是通過其他方式複制其工作原理。