UNIXシステムコール

accept

acceptは接続してきた相手のソケットを受け付けるUNIXシステムコール・・・。Man page of ACCEPTlistenでリッスンした後にこれを呼ぶと、相手が接続する(アクセプト)まで次の処理にいかない(ブロッキング)・・・。相手が接続してきたら、引数のaddrに相手のI…

ntohs

ntohsは、ネットワークバイト―ダからホストバイトオ―ダに変換するライブラリ関数・・・。Man page of BYTEORDERhtonsでネットワークバイトオ―ダに変換したポート番号をホストバイトオ―ダに戻す時などに使う・・・。これで戻してみる・・・。ネットワークバイ…

inet_ntoa

inet_ntoaは、in_addr構造体のIPアドレスをIPアドレス文字列に変換するライブラリ関数・・・。Man page of INETinet_atonで、変換した後のin_addr構造体addrを元の文字列に戻す・・・。in_addr構造体のaddrとIPアドレス文字列を指すchar *ポインタip_addr_st…

inet_aton

inet_atonは、IPアドレス文字列をネットワークバイトオーダのバイナリ値に変換するライブラリ関数・・・。Man page of INETIPアドレス1.2.3.4を変換する・・・。in_addr構造体変数addrを用意・・・。inet_atonで"1.2.3.4"をネットワークバイトオーダ(ビッグ…

listen

listenは、通信する相手からの接続の待ち受けを開始するUNIXシステムコール・・・。Man page of LISTENバインドしたソケットをこれに渡すことで、相手からの接続を待ち受ける・・・。 接続は1つずつ受付処理されるので、2番目以降は保留となり待ち行列を形成…

setsockopt

setsockoptは、ソケットのオプション設定をするUNIXシステムコール・・・。Man page of GETSOCKOPTよく使うオプションとしては、SO_REUSEADDRが挙げられる・・・。サーバプログラムで、同じポート番号でbindを繰り返すと、"Address already in use"が出て、…

bind

bindは、作成したソケットのソケットファイルディスクリプタと、自身のIPアドレスやポート番号などの情報を紐付けるUNIXシステムコール・・・。Man page of BINDsocketでソケットを作成はしたものの、自分のIPや使用するポートがわからなければ通信できない…

htons

htonsは、ホストバイトオーダからネットワークバイトオーダに変換するライブラリ関数・・・。Man page of BYTEORDER作成したソケットには、自分のIPやポート番号などを紐付けるバインドという作業が必要・・・。 ホストコンピュータ(Intel x86搭載機など)で…

socket

socketは、通信をするために必要なソケットを作成するUNIXシステムコール・・・。Man page of SOCKETざっくり言うと、インターネットなど他のコンピュータとの通信は、ソケットを作成し相手先に接続をした上で、ソケットへの書き込みや読み込みを通じたデー…

write

writeは、指定されたファイルディスクリプタに、指定されたバイナリデータを書き込むUNIXシステムコール・・・。Man page of WRITEreadと同様に、writeも使い分けを考える必要がある・・・。 writeとfwriteで比較してみる・・・。"ABCD"の4バイトデータをwri…

read

readは、指定されたファイルディスクリプタから、バイナリデータをバッファに読み込むUNIXシステムコール・・・。Man page of READfreadも最終的にはこのreadを呼ぶが、なぜfreadとreadを使い分けるのか・・・。 2パターンのバイナリデータをreadとfreadでそ…

open

openは、指定されたファイル名のファイルを開くUNIXシステムコール・・・。Man page of OPENこれまで、標準Cライブラリfopenでファイルを開いてきたが、これは高水準入出力関数であり、バッファリングなどの補助的な機能を有する・・・。 一方、システムコー…

clock

clockは、CPUがとある処理にかかった時間を計測するためのC標準ライブラリ関数・・・。Man page of CLOCKclock_tはプロセッサ時間単位なので、秒単位の結果を得るには、 開始と終了のclock_tの差をCLOCKS_PER_SECで割ればいい・・・。前回のループ処理(iを0…

difftime

difftimeは2つの時刻の差を求めるC標準ライブラリ関数・・・。Man page of DIFFTIME戻り値はdoubleで返る・・・。これを使って、とある処理にかかる時間を計測する・・・。 といっても、変数iを0から1000000になるまで足し合わせるだけだが・・・。開始時刻s…

mktime

mktimeは、ローカル時刻が格納されているtm構造体の時刻情報をUNIX時間へ変換し、time_t型変数として返すC標準ライブラリ関数・・・。Man page of CTIMEここまでで、time: time_tを取得 localtime: time_t -> tm構造体 asctime: tm構造体 -> 時刻文字列 strp…

strftime

strftimeは、tm構造体の時刻情報を指定のフォーマットに従って時刻文字列に変換し、指定のバッファに格納するC標準ライブラリ関数・・・。Man page of STRFTIMEstrptimeは、時刻文字列をパース -> tm構造体に格納なのに対し、strftimeは、tm構造体 -> 指定の…

strptime

strptimeは、指定された時刻文字列を指定されたフォーマットに従って解析(パース)し、指定されたtm構造体に時刻情報を格納するライブラリ関数・・・。 これはC標準ライブラリには含まれていない模様・・・。また、VisualC++などWindows環境でも使えない・・…

ctime

ctimeは、指定されたtime_t型変数のUNIX時間を直接ローカル時刻文字列に変換し、その文字列ポインタを返すC標準ライブラリ関数・・・。Man page of CTIMEこれまではlocaltimeでtm構造体への変換を経由していたが、これを使って直接ローカル時刻文字列を取得…

asctime

asctimeは、指定されたtm構造体の時刻情報を時刻文字列に変換し、その文字列ポインタを返すC標準ライブラリ関数・・・。Man page of CTIME前回までのように、printfにtm構造体の各要素を指定することなく、時刻文字列にできるので、これを使って時刻文字列を…

localtime

localtimeは、指定されたtime_t型変数のUNIX時間をローカル時刻に変換し、 時刻情報をtm構造体に格納するC標準ライブラリ関数・・・。Man page of CTIMEローカル時刻、つまり日本なら日本時間(JST)に変換できるので、これで日本の時刻文字列を表示する・・・…

gmtime

gmtimeは、指定されたtime_t型変数のUNIX時間をグリニッジ標準時の時刻に変換し、 時刻情報をtm構造体に格納するC標準ライブラリ関数・・・。 (これ自身はシステムコールではないが、timeシステムコールに関連するライブラリ関数なので、このカテゴリで扱う…

time

timeは、「UNIX時間」と呼ばれる時刻を表す数値を返すUNIXシステムコール、およびC標準ライブラリ関数・・・。Man page of TIMEUNIX時間は、UTC(協定世界時)における1970年1月1日0時0分0秒からの経過秒数であり、time_t型の数値として表わされる・・・。 tim…