NTシステムデザインの技術メモ

Linuxプログラミングメモ

最終更新:

ntaka206

- view
管理者のみ編集可

statfs/statvfsでディスク容量get

Manpage of STATFS <http://www.linux.or.jp/JM/html/LDP_man-pages/man2/statfs.2.html>
Manpage of STATVFS <http://www.linux.or.jp/JM/html/LDP_man-pages/man2/statvfs.2.html>
statvfsの使用が推奨されている。
注意、statfs/statvsfに与えるパスは、デバイス名ではなくデバイスのマウントポイントである。
#include <sys/vfs.h>
#include <sys/statvfs.h>
#include <stdio.h>
void main(void)
{
	int	ret;
	struct statfs st;
	struct statvfs stv;

	ret = statfs("/data", &st);
	printf("statfs ret=%d\n", ret);
	printf("f_bsize=%d\n", st.f_bsize);
	printf("f_blocks=%lublock %luK\n", st.f_blocks, st.f_blocks*st.f_bsize/1024);
	printf("f_bfree=%lublock %luK\n", st.f_bfree, st.f_bfree*st.f_bsize/1024);
	printf("f_bavail=%lublock %luK\n", st.f_bavail, st.f_bavail*st.f_bsize/1024);

	ret = statvfs("/data", &stv);
	printf("statvfs ret=%d\n", ret);
	printf("f_bsize=%ld\n", stv.f_bsize);
	printf("f_frsize=%ld\n", stv.f_frsize);
	printf("f_blocks=%ldblock %ldK\n", stv.f_blocks, stv.f_blocks*stv.f_frsize/1024);
	printf("f_bfree=%ldblock %ldK\n", stv.f_bfree, stv.f_bfree*stv.f_frsize/1024);
	printf("f_bavail=%ldblock %ldK\n", stv.f_bavail, stv.f_bavail*stv.f_frsize/1024);
}

mkdir()

int mkdir(const char *pathname, mode_t mode);
modeは、8進数で指定する。
mkdir(dir, 0777);
0x777とかにしないように。
Manpage of MKDIR <http://www.linux.or.jp/JM/html/LDP_man-pages/man2/mkdir.2.html>

ソケット

read()

socketでread()=0の時は、ソケット接続が切れたと判断する。
成功した場合、読み込んだバイト数を返す (0 はファイルの終りを意味する)。

select()

Manpage of SELECT_TUT http://www.linux.or.jp/JM/html/LDP_man-pages/man2/select_tut.2.html
上記ページの「SELECT の掟」は必読。

non-blocking

非ブロッキングな I/O をソケットで行うことは可能で、 fcntl(2) を使ってソケットのファイルディスクリプタに O_NONBLOCK フラグをセットすれば良い。こうするとブロックされる操作は、 (通常) EAGAIN エラーで戻ることになる (後で処理が再試行されることが期待されている)。 connect(2) では EINPROGRESS エラーが返される。この場合、ユーザはさまざまなイベントを poll(2) や select(2) を使って待つことができる。

デバイスドライバ

デバイスドライバーズ カーネル2.6のモジュールコンパイル用Makefileいろいろ



The Linux Kernel Module Programming Guide

大見出し

目安箱バナー