構造体ぐぐるのめんどくさいねw っていうプログラム。
- 作者: 小俣光之,種田元樹
- 出版社/メーカー: 秀和システム
- 発売日: 2011/01
- メディア: 単行本
- 購入: 1人 クリック: 24回
- この商品を含むブログ (10件) を見る
ゆういちろうとこの本を読んでいるとき、
struct addrinfo *res0;
...
getnameinfo(res0->ai_addr,res0->ai_addrlen,....
「getnameinfoってなんだっけなー。manでも見ようー」
int getnameinfo(const struct sockaddr *sa, socklen_t salen,....
「あ? 第一引数の saはポインタを必要としてて、第二引数は普通のsocklen_t...
やのに、なんで『res0->』っていう形は一緒なんじゃよ!」
という感じで、ゆういちろうとブチギレてるときに、
ゆういちろう「あっ。それ構造体がそういう形だからじゃない?」
足軽「なるほどな。じゃあ見ようか。」
ゆういちろう「はぁ…またぐぐらな。」
足軽「構造体manないもんな。」
ゆういちろう「足軽作ってよ」
足軽「えー…わかった。」
で作ったのが
from sys import argv def AlPro(x=None): Arr = {} for j in ['/usr/include/netdb.h',"/usr/include/netinet/in.h"]: with file(j) as pc: struct = [] FLAG=0 for line in pc: if line.startswith('struct'): stname = line.split()[1] FLAG=1 elif FLAG: struct.append(line) if '};' in line.split(): Arr[stname] = struct if stname == x: break struct =[] FLAG=0 else: continue return Arr if x is None else Arr[x] if __name__ == '__main__': if '-a' in argv: for j in AlPro(): print j stru = raw_input('>>') for i in AlPro(stru): print i,
もっといい方法があれば教えてくださいな。
使い方
$ python test.py -a ←オプションaで構造体一覧 ipv6_mreq hostent addrinfo in_addr group_source_req protoent sockaddr_in servent group_filter group_req gaicb in6_pktinfo ip_mreq ip6_mtuinfo sockaddr_in6 ip_msfilter in6_addr ip_mreq_source >>addrinfo ←ここで入力 { int ai_flags; /* Input flags. */ int ai_family; /* Protocol family for socket. */ int ai_socktype; /* Socket type. */ int ai_protocol; /* Protocol for socket. */ socklen_t ai_addrlen; /* Length of socket address. */ struct sockaddr *ai_addr; /* Socket address for socket. */ char *ai_canonname; /* Canonical name for service location. */ struct addrinfo *ai_next; /* Pointer to next in list. */ };
構造体が出てきます。。
さっきの例で言うなれば、
ai_addr こいつは構造体として宣言されてるね。 ai_addrlen こいつは普通やね
ってなります。
あー、構造体が入ってるファイルは自分で追加できるようにしてね。
['/usr/include/netdb.h',"/usr/include/netinet/in.h"]
〜終わり〜
今日撮ったイチ押し