UNIXの関数定義を見る方法と同様に、マニュアルページを使用して構造体定義を表示できますか?マニュアルページを使用して構造体定義を取得する
たとえば、ネットワークプログラミングでは、struct sockaddr_in
という構造を使用します。とにかくsockaddr_inがマニュアルページを使ってライブラリでどのように定義されているか見ていますか?
ご協力いただければ幸いです!ありがとう!
UNIXの関数定義を見る方法と同様に、マニュアルページを使用して構造体定義を表示できますか?マニュアルページを使用して構造体定義を取得する
たとえば、ネットワークプログラミングでは、struct sockaddr_in
という構造を使用します。とにかくsockaddr_inがマニュアルページを使ってライブラリでどのように定義されているか見ていますか?
ご協力いただければ幸いです!ありがとう!
機能によって異なります。たとえば、をbind(2)
と見て、struct sockaddr
という定義を得ることができます。
残念ながら、struct sockaddr
のマニュアルページはありません。
この情報を取得する他の方法は、適切なヘッダーファイルを検索することです。
ありがとうございます。ヘッダーファイルを見ることは間違いなくオプションです。しかし、特定の構造を含む関数を決定する方法はありますか? –
さて、私はGoogle検索が良い方法だと思います。別の方法は、[grep](http://linux.die.net/man/1/grep)をインクルードディレクトリの構造体にすることです。 – Anthony
Google検索はすべての選択肢の中で最善の選択です。しかし残念ながら私はライブインターネット接続なしで時々働かなければなりません。 –
本当に気にする必要はないと思います。システムコールは、抽象データ型を扱い、提供するものと見なすことができます。たとえば、open
が整数を返しても、その整数をインクリメントする意味はありません。このような理由から、Ocaml Unixモジュールでは、open
という結果が抽象的なfile_descr
タイプであり、int
(実際はそうではありません)とは異なります。
つまり、struct sockaddr_in
が変更された場合、CコードまたはC++コードは理想的には変更されません。
これはある意味では真ですが、[connect](http://linux.die.net/man/2/connect)のような関数では、 'struct sockaddr'の構造や友達を知る必要があります適切な接続。 – Anthony
それから、 'grep -rn2 sockaddr/usr/include'は実質的に(' libc6-dev'などのようなすべての開発パッケージがインストールされていれば)十分です。 –
man-pagesは、人間によって書かれたか、人間の願いによって作られた単なるファイルです。通常、関連するすべての構造体は、それらが使用する関数を持つmanページに記述されています。場合によっては、ヘッダーファイルのページ(time.h(0p))を見つけることができます。時々ライブラリ全体のページがあります(libsensors(3))。時々、構造の実際のページがあります(XAnyEvent(3))。
apropos
とwhatis
にチェックしてください。場合によっては、探しているものに関連するページを見つけることができます。
echo '#include <netinet/in.h>' | gcc -E - | less
関連する関心の生成:任意のヘッダの
これは、プリプロセッサオプションで任意のコンパイラを使用して行うことができる
# 225 "/usr/include/netinet/in.h" 3 4
struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof (struct sockaddr) -
(sizeof (unsigned short int)) -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
(私の知っているすべてのCコンパイラはこれを行うことができます)。
echo '#include <netinet/in.h>' | gcc -E - | less
関連する関心の生成:任意のヘッダの
これは、プリプロセッサオプションで任意のコンパイラを使用して行うことができる
# 225 "/usr/include/netinet/in.h" 3 4
struct sockaddr_in
{
sa_family_t sin_family;
in_port_t sin_port;
struct in_addr sin_addr;
unsigned char sin_zero[sizeof (struct sockaddr) -
(sizeof (unsigned short int)) -
sizeof (in_port_t) -
sizeof (struct in_addr)];
};
(私の知っているすべてのCコンパイラはこれを行うことができます)。 sockaddr_in
のマニュアルページはIP(7)
です。
少し遅れていますが、関連する構造はマニュアルページip
にありますので、少しスクロールしてください。例えば -
> man ip
利回り
Address format
An IP socket address is defined as a combination of an IP interface address and a 16-bit
port number. The basic IP protocol does not supply port numbers, they are implemented
by higher level protocols like udp(7) and tcp(7). On raw sockets sin_port is set to the
IP protocol.
struct sockaddr_in {
sa_family_t sin_family; /* address family: AF_INET */
in_port_t sin_port; /* port in network byte order */
struct in_addr sin_addr; /* internet address */
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
だけで、関連するmanページを検索し、あなたはあなたの参照のための様々な情報を見つけることができます。
vimを使用している場合は、ctagsを使用して '/ usr/include'ディレクトリのタグを生成し、タグにジャンプして定義を表示できます。さもなければ、オープンソースプロジェクトの良い機会のように見えます! –