「Linux/雑記」の版間の差分

提供: Wikinote
移動: 案内検索
(ioctl() の使い方)
(ioctl() の使い方)
行47: 行47:
 
* 基本的には、<code>fd = open()</code> して <code>ioctl(fd, ''request'', ...)</code> して <code>close(fd)</code> という流れ。
 
* 基本的には、<code>fd = open()</code> して <code>ioctl(fd, ''request'', ...)</code> して <code>close(fd)</code> という流れ。
 
* <code>''request''</code> は、<code>man ioctl_list</code> から探す。引き数の型も書いてあるので、これを参考にする。
 
* <code>''request''</code> は、<code>man ioctl_list</code> から探す。引き数の型も書いてあるので、これを参考にする。
* サンプルコード:RO (リードオンリー) フラグをセットする
+
* サンプルコード:setro.c - RO (リードオンリー) フラグをセットする
 
  #include <stdio.h>
 
  #include <stdio.h>
 
  #include <fcntl.h>
 
  #include <fcntl.h>

2009年4月5日 (日) 23:31時点における版

覚え書き

未分類の覚え書き。

top について

top の man ページは読みづらいので、あまり読みたくない。

すべてのプロセスの top 情報を表示する

通常は画面に収まるだけのプロセスの情報しか表示されないが、すべてを出力することもできる。

# top -bn 1
-b
バッチモード。テキストに出力する場合はこれを使う。
-n number
出力する回数を指定する。

激速 top

# top -d 0.01
-d ss.tt
出力する間隔を指定する。マニュアルには、小数点以下は 1/10 秒と書いてあるが、1/100 秒までいけるようだ。よって、0.01 が最速で、Celeron 1.80 GHz だと 40 % 程度の CPU 時間を消費する。かるーく負荷をかけたいときなんかには、調節ができて便利。(ぇ

telnet-server について

telnet サーバの立ち上げかたと、ハマったところ。

  1. /etc/xinetd.d/telnet 中の disable = yesno にする
    • chkconfig telnet on でもよい
  2. /etc/init.d/xinetd restart で xinetd を再起動する (これがわからずハマった…)

以下のようなエラーが出て接続できない場合

Trying 192.168.1.1...
Connected to server.
Escape character is '^]'.
getaddrinfo: localhost Name or service not known
Connection closed by foreign host.

/etc/hosts に 192.168.1.1 server.hagio.org を追加するとよい。 ホスト名 "server" だけではダメで、FQDN にしたら接続できた。要するに、hostname コマンドの出力結果を貼付ける。 これも数時間ハマった。なぜこうしないといけないのかは不明なので、そのうち調査する。

BIOS のバージョンや HW 情報を得るには

# dmidecode

これもよく忘れる…。

パーティションテーブルの変更をカーネルに知らせるには

# partprobe

これ、よく忘れる上に Web で検索しにくいのだよ。でっかいクワガタを捕まえた気分 (謎)。

カーネル引き数を知るには

$ cat /proc/cmdline

ioctl() の使い方

  • 基本的には、fd = open() して ioctl(fd, request, ...) して close(fd) という流れ。
  • request は、man ioctl_list から探す。引き数の型も書いてあるので、これを参考にする。
  • サンプルコード:setro.c - RO (リードオンリー) フラグをセットする
#include <stdio.h>
#include <fcntl.h>
#include <linux/fs.h>

int main(int argc, char* argv[]) {
	int fd, res, flag;

	if (argc != 3) {
		printf("Usage: setro DEVICE RO_FLAG\n");
		return 1;
	}

	if ((fd = open(argv[1], O_RDWR)) < 0) {
		perror("open() failed");
		return 1;
	}

	flag = (int) *argv[2] - '0';
	if ((res = ioctl(fd, BLKROSET, &flag)) < 0) {
		perror("ioctl() failed");
		close(fd);
		return 1;
	}
	close(fd);
	return 0;
}

実行例:/dev/sda1 (/boot) をリードオンリーにする。

[root@centos52 ~]# umount /boot ★いったんアンマウント
[root@centos52 ~]# ./setro /dev/sda1 1 ★リードオンリーにセット
[root@centos52 ~]# mount /boot
mount: ブロックデバイス /dev/sda1 は書き込み禁止です、読込み専用でマウントします
[root@centos52 ~]# umount /boot
[root@centos52 ~]# ./setro /dev/sda1 0 ★リードオンリーを解除
[root@centos52 ~]# mount /boot

タイマについて

jiffies 変数
タイマ割り込みの回数を記録する。jiffies_64 の下位 32 ビットが jiffies。グローバルタイマ割り込みハンドラ do_timer() にてインクリメントされる。
HZ マクロ
1 秒間に発生するタイマ割り込みの回数。RHEL では 1000、SLES では 250
xtime 変数
1970/01/01 からの経過時間。グローバルタイマ割り込みハンドラ do_timer() にて進められる。

/etc/sysconfig/i18n について

  • 読み込まれる場所
    • /etc/rc.d/rc.sysinit (rhgb 利用時のみ?)
    • /etc/init.d/functions/etc/profile.d/lang.sh
    • /etc/init.d/firstboot
  • SUPPORTEDsystem-config-language (GUI アプリ) が使う