Shammer's Philosophy

My private adversaria

2009-01-01から1年間の記事一覧

MacProのHDD増設

Mac

MacProのHDDを増設してみた。 バルク品なので多少動作に不安はあったが、つけてみると問題はない。 もともと使われていたHDDを見たら、WesternDegitalのもので、 今回付けたのがSeagateのST31000528AS-BOXというもの。 SerialATA2で、7200回転でキャッシュメ…

inet_ntopの情報とgetaddrinfo-sample完成版

C

getaddrinfo sample_Debug - Shammerismの内容を受けて、inet_ntopを調べてみた。といっても、man inet_ntop の情報を見ただけだが。 const char * inet_ntop(int af, const void * restrict src, char * restrict dst, socklen_t size); ... The function i…

getaddrinfo sample_Debug

C

getaddrinfo sample_alpha - Shammerismの実行結果を見ていて、ai_addr が 0.0.0.0 になっているのは af_family が 30 の場合のようだ。ai_family を意識してネット検索して、getaddrinfo.cというサンプルを見つけた。自分のサンプルとの大きな違いは、 ai_f…

getaddrinfo sample_alpha

C

getaddrinfo の man の内容を見てみた。 DESCRIPTION The getaddrinfo() function is used to get a list of IP addresses and port numbers for host hostname and service servname. It is a replacement for and provides more flexibility than the geth…

ダブルチェックでも不十分・・・

JavaでSingletonなどを実装するときに、インスタンスフィールドが 複数スレッドからアクセスされないようにするためのテクニックとして、 ダブルチェックという手法がよく使われる。こんな感じ。 public final class SingletonService { private static fina…

getaddrinfo & getnameinfo

C

gethostbyname や、gethostbyname2 の man の内容を確認してみたが、Description の冒頭には以下のように書いてある。 The getaddrinfo(3) and getnameinfo(3) functions are preferred over the gethostbyname(), gethostbyname2(), and gethostbyaddr() fu…

gethostbyname2 sample

C

gethostbyname のサンプルに続いて、gethostbyname2 のサンプルも書いてみた。とりあえず、gethostbyname sample - Shammerismの gethostbyname を gethostbyname2 にしてコンパイルしてみたが、引数違いでエラーとなってしまった。 $ gcc gethostbyname2-c.…

gethostbyname sample

C

gethostbyname のサンプルだが、hostent 内容出力 - Shammerismの実装をちょっと変更するだけでできた。以下の様な感じ。 #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <netdb.h> #include <sys/time.h> #include <stdlib.h> int main(int argc, char *args[]){ if( argc == 2 ){ char *hoststri</stdlib.h></sys/time.h></netdb.h></stdio.h></netinet/in.h></arpa/inet.h>…

hostent 内容出力

C

gethostbyaddr man page - Shammerismと要素数文字数不特定の文字列配列の扱い - Shammerismの情報が揃ったので、hostent 構造体の内容を出力するプログラムを書けるはず、ということで書いて実行してみました。 #include <arpa/inet.h> #include <netinet/in.h> #include <stdio.h> #include <netdb.h> #i</netdb.h></stdio.h></netinet/in.h></arpa/inet.h>…

要素数文字数不特定の文字列配列の扱い

C

hostent 構造体の内容も構造体の中身を埋める方法も、gethostbyaddr man page - Shammerismの内容でわかったので実際に挑戦してみたが、文字列の配列(char ** のデータ、つまり、h_aliases と h_addr_list)の要素数のカウントがうまくできず・・・解決方法…

gethostbyaddr man page

C

man gethostbyaddr で得られた情報の一部(Description)。 DESCRIPTION The getaddrinfo(3) and getnameinfo(3) functions are preferred over the gethostbyname(), gethostbyname2(), and gethostbyaddr() functions. The gethostbyname(), gethostbyname2(…

gethostbyaddr を試してみた。

C

localhost という文字列から、127.0.0.1 という結果を得るにはどうすればよいか、を調べていたが、 最初に見つけたのは、How to use gethostbyaddr() functionというサイト。gethostbyaddr という関数名からは、IP アドレスからホスト名を見つける関数のよう…

EchoClientV2

C

以下の記事等でいろいろやってきたが、原因はケアレスミスだった。 EchoClientV2_apha - Shammerism EchoClientV2_Debug - Shammerism warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion] - Shammer…

warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]

C

文字列 printf で Segmentation fault 実験 - Shammerismのテストで、 warning: incompatible integer to pointer conversion assigning to 'char *' from 'int' [-Wint-conversion]という Warning が出ていたが、この意味がわかった。 これは、 変数は char…

文字列 printf で Segmentation fault 実験

C

EchoClientV2_Debug - Shammerismのように、文字列の画面出力でちょっと謎の動作をしているので実験。 まずは以下のコード。 #include <stdio.h> int main(int argc, char *args[]){ char x[] = "abc"; printf("%s\n", x); return 0; }この実行結果は以下。 $ gcc seg</stdio.h>…

EchoClientV2_Debug

C

EchoClientV2_apha - Shammerismでうまくいかなかったのでデバッグ。いつ Segmentation fault になっているのか?サーバーからの受け取り文字列は表示されていないのでその前、かつ、サーバーは送信文字を受け取っているのでその後。結局、追記した場所だ(…

Optiplex 760 メモリ増設

会社のPCにメモリを追加した。 だいぶ前のことだけれども、自作パソコンを作っていて、 デュアルチャネルメモリにするとほとんどのメモリはうまくいかず、 結局サムスンの高いメモリにしないと動作しなかったことがある。 この経験からPCのメモリ増設にはも…

EchoClientV2_apha

C

ネットワークバイトオーダー - ShammerismのEchoClientを修正して、サーバーからの応答文字を表示するような作りにした。また、意図的に close していなかったので close を追加。close には unistd.h のインクルードが必要なのでそれも実行。書き上がった実…

sipp aborted...

Voice over IP で使用される SIP というプロトコルがあるらしい。ちょっと動かしてみようと手元の環境にインストールしてみた。インストール後に sipp と実行すると以下のように出たので 〜略〜 Example: Run sipp with embedded server (uas) scenario: ./s…

Directories size check

ディレクトリごとのサイズを確認する際に便利なコマンド。Linux tip: Hunt the disk hog | Computerworldで紹介されていた。 du -cks * |sort -rn |head -11エイリアスに登録しておけば楽ちんかも。

EchoServerV4

C

EchoServerV4_alpha - Shammerismの実装を少し修正。accept の位置を変更。それから、サーバー側の Socket をクローズする箇所も想定通りの動作をさせるためには不適切だったのでこれも変更した。Version 4 の実装は以下。 #include <stdio.h> #include <string.h> #include <stdlib.h> #i</stdlib.h></string.h></stdio.h>…

EchoServerV4_alpha

C

EchoServerV3 - Shammerismの実装にちょっと追記して、 クライアントが閉じてもサーバーは動作し続ける クライアントが quit という文字を送ってきたらサーバーも終了する サーバー終了時にはクライアントに終了したことを知らせる というように変更してみた…

C 言語の文字列比較

C

strcmp という関数が用意されている。String compare の略だろうか。文字列引数を2つとり、その2つが同じだったら 0 を、異なる場合には 0 以外の値を返す。 #include <stdio.h> #include <string.h> int main(int argc, char *args[]){ if ( argc == 3 ) { int result = strc</string.h></stdio.h>…

EchoServerV3

C

EchoServerV2 - Shammerismの EchoServer を動作させて、クライアントからメッセージ送ってみたけれども、受け取ったメッセージを表示させない作りになっていたので表示させるようにちょっとだけ書き換えました。 // http://d.hatena.ne.jp/shammer/20090730…

ネットワークバイトオーダー

C

先日のEchoClient を実装したが動かず - Shammerismが動作しない原因は、ネットワークバイトオーダーに関係するものであったとわかった。具体的には、 // Build Destination Socket Informations memset(&destination_addr, 0, sizeof(destination_addr)); d…

Mac でZIPにパスワードを使用

Mac

ターミナルでやる方法がわからなかったのでいろいろ調べました。 10.5以前は使えないかもしれないのですが、 zipcloak hogehoge.zipというコマンドがあるようだ。 これをやると、 Enter password: (PASSWORD入力。空白状態) Verify password: 同上というプ…

長男誕生!

今日は自分の人生にとって忘れられない一日となるだろう。 昨夜、会社から帰ると妻の様子がおかしい。お腹が痛いらしく、ついにキタか・・・という気持ちになった。 すぐに病院に行った方がいいと判断して、病院にTEL。夜中の九時過ぎに家を出た。 病院に行…

EchoClient を実装したが動かず

C

EchoServer ができているので、動作確認のためのクライアントも書いてみました。 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <netinet/in.h> int error_exit(char *message) { perror(message); exit(1); } int checknumber(char *v){ int len = strlen(</netinet/in.h></arpa/inet.h></string.h></stdlib.h></stdio.h></ctype.h>…

文字列とポインタ

C

なんかわかったようなわからないような・・・ Cで文字列を扱う場合は、 int main(void) { char *value = "TEST"; printf("%s\n", value); return 0; }というように、char型のポインタに""で囲んだ文字列を代入し、以降はそのポインタが代入した文字を指す、 …

環境変数取得方法

C

main関数の引数に、char* envp[] というような第三引数を指定すれば、 OSの環境情報を取得可能。 #include <stdio.h> int main(int arg_count, char* args[], char* envp[]) { char** p; for( p = envp ; *p != NULL ; p++ ){ printf("%s\n", *p); } return 0; }名前</stdio.h>…