TOP

プログラミング技術

データ型のサイズ

データ型 Java
char 8ビット 8ビット
short 16ビット 16ビット
int 16又は32ビット 32ビット
long 32ビット 64ビット

C言語関連

ANSI CとK&R C

K&R Cとは、C言語の開発者であるカーニハン&リッチーが提唱し、後に拡張したC言語であり、ANSIによる規格制定前は事実上のスタンダードなC言語仕様だった。ANSI C制定後はANSI Cに準拠することが一般的になったが、現在でもK&R CはUNIX C分野ではスタンダードの一つとしてあつかわれ、一般的なUNIX CコンパイラはデフォルトではANSI CおよびK&R Cの拡張機能をサポートする。

SunのCコンパイラにおいても、デフォルト(-Xa)はANSI CおよびK&R C拡張機能でのコンパイルとなる。ANSI CとK&R Cの相違点については以下を参照(SunCの場合)。

「K&R Sun C と Sun ANSI/ISO C の違い」

select関数について

select関数の第一引き数は、poll関数と違い、指定するファイルディスクリプタの個数とかではなく、指定したファイルディスクリプタ値の最大数+1の値を指定する。ファイルディスクリプタ値は0から割り振られるので、その値がプロセスで使用しているファイルディスクリプタの中で、selectのファイルディスクリプタ配列に指定されているものの最大値となる。

FD_SET(7,&fds);
FD_SET(9,&fds);
selectcnt = select(10, &fds, 0, 0, NULL);

二次元配列を関数に渡す場合

二次元配列を関数に渡す場合、ただポインタを渡すだけだと関数内で二次元配列であることを認識できなくなってしまい、大変都合が悪い。よて、関数の引き素宣言には列の次元をつけることが強く推奨される。以下は関数funcが引き数として二次元配列day[2][3]のポインタを得る場合の宣言方法である。

func(int day[][3]) { ... }

または、

func(int (*day)[3]) { ... }

selectとpoll

linuxとunixでのselect()機能の違い

その他

typedef	uint32_t	in_addr_t;

struct in_addr {
	union {
		struct { uint8_t s_b1, s_b2, s_b3, s_b4; } _S_un_b;
		struct { uint16_t s_w1, s_w2; } _S_un_w;
		in_addr_t _S_addr;
	} _S_un;
}

struct sockaddr_in {
	sa_family_t		sin_family;
	in_port_t		sin_port;
	struct in_addr	sin_addr;
}

TOP