ファイルへの変更が/etc/hosts
すぐに適用されるように見えます。実装方法が気になります。この機能を達成するためにどのような魔法が使用されますか?
ベストアンサー1
/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のパーサーを直接使用しなくても、ホスト名を解決する必要があるたびに開いて読みますが、他の方法で動作を複製します。