2017-01-19 16 views
2

機能がありますhttps://linux.die.net/man/3/getnameinfo私はそのシステムコールが何であるかをどのように知っていますか? Linuxのシステムコールテーブルにはこのような機能はありません。または、そのCライブラリにのみ存在しますか?getnameinfo - Linuxのシステムコールは何ですか?

+5

マニュアルの第3章では、システムコールではないことを示しています。セクション2はシステムコール用、セクション3はCライブラリ関数用です。 –

+0

@RossRidge、これは大会ですか?セクション1とは何ですか? – Kooiomo

+2

'man man'はセクションを表示し、1は"実行可能プログラムまたはシェルコマンド " – TrentP

答えて

3

getnameinfoには直接システムコールがありません。これは、要求を満たすために多数のアクティビティを実行するライブラリ関数です。ホスト名を検索する場合、例えば、それはそうしようとします:

  • (例えば​​と/etc/hostsなど)ローカルファイル
  • は、そのDNSサーバーのIPアドレスを見つける相談(/etc/resolv.confを読む)
  • ソケットへの書き込みを行うと、あなたが正しくgetnameinfo APIを使用して、簡単なアプリケーションを作成する場合は、その後、straceユーティリティを使用することができます

ホスト名を求めるためにDNSプロトコルを使用して読み込みますどのシステムコールが使用されているかを調べる。余分な情報がたくさんありますが、慎重に勉強すれば関連する通話が表示されます。私のシステム上の関連する出力のいくつかの行:

... 
open("/etc/nsswitch.conf", O_RDONLY|O_CLOEXEC) = 3 
... 
open("/etc/hosts", O_RDONLY|O_CLOEXEC) = 3 
... 
socket(PF_INET, SOCK_DGRAM|SOCK_NONBLOCK, IPPROTO_IP) = 3 
connect(3, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("8.8.8.8")}, 16) = 0 
... 
+0

アセンブリアプリケーションのために何が良いですか:それを自分で実装するか、C関数を使用しますか? – Kooiomo

+1

@Kooiomo疑わしいときは、C関数を使用してください。移植性を高めるために、すべてのシステムコールとライブラリ関数をlibcに呼び出すことをお勧めします。 – fuz

関連する問題