気になったこと、まとめ
最近、 "基礎からわかるTCP/IPネットワーク実験プログラミング"という本を読んでいるんですが、 サンプルを読んでて気になったことがいくつかあるのでまとめ。 とりあえずアウトプットのために書いているだけなので、 あしからず。
システムコールの確認
p132、UDPサーバプログラムリストの185行目
if((fp = popen(command, "r")) == NULL) {
見た感じで何をするシステムコールなのかは分かっちゃうわけですが、 使ったことがなかったので、 ふつリナをめくって調べてみました。
popen(3)
#include <stdio.h> FILE *popen(const char *command, const chr *mode);popen()は、 プログラムcommandを起動してそれにパイプをつなぎ、 そのパイプを表すstdioストリームを返します。 失敗したらNULLを返します。
・・・
なお、 popen()ではプログラムがシェル経由で実行されるので、 第1引数commandの文字列ではリダイレクトやパイプも使えます(ふつリナより)
リダイレクトやパイプも使えるのか。pipe()とかexec()系のシステムコールを使えば、 似たようなことができそうだけど、 こっちのほうが簡単。
ifで目があっちこっちいく話
ちなみに上のコードでもそうでしたが、 僕はifの条件式の中に文が入っているのは好きじゃありません。 よくあるパターンが
if( (fp = fopen(filename, "r")) != NULL) {
普通、 プログラムは英文同様に左から右に読むものだと思うのですが、 こういった書き方をされると、 上手く言えないのですが、 目が左にいったり右にいったりするような不快感があるんですよ。 まぁ、上のfopenの例は定石みたいなもんなので大丈夫ですが、 もっと複雑なやつとかになってくるとアウトですね・・・。
個人的には、こう書いてほしい。
fp = fopen(filename, "r"); if(fp == NULL) {
といっても、 あちこちのサンプルは前者の書き方をよく使ってるので、 慣れるしかないですね。
基礎からわかるTCP/IP ネットワーク実験プログラミング―Linux/FreeBSD対応
- 作者: 村山公保
- 出版社/メーカー: オーム社
- 発売日: 2004/10
- メディア: 単行本
- 購入: 3人 クリック: 38回
- この商品を含むブログ (11件) を見る
ふつうのLinuxプログラミング Linuxの仕組みから学べるgccプログラミングの王道
- 作者: 青木峰郎
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2005/07/27
- メディア: 単行本
- 購入: 31人 クリック: 366回
- この商品を含むブログ (137件) を見る