カーネルからリンクダウン時のイベントを飛ばす処理を探す
あるインタフェースのリンク状態を確認するために、netlinkソケットを使ってカーネルからメッセージを受信するサンプルがnetlink(7)に載っています。
struct sockaddr_nl sa; memset(&sa, 0, sizeof(sa)); sa.nl_family = AF_NETLINK; sa.nl_groups = RTMGRP_LINK | RTMGRP_IPV4_IFADDR; fd = socket(AF_NETLINK, SOCK_RAW, NETLINK_ROUTE); bind(fd, (struct sockaddr *) &sa, sizeof(sa));
このRTMGRP_LINKなパケットがどこから飛んでくるのかを調べたのでメモ。
続きを読む1年生に送るデバッガ(gdb)の使い方(中級編)
前回の記事でコアダンプからセグメンテーション違反の原因を探す方法を書きました。
今回はデバッガからプログラムを実行することで、実行中のプログラムを一時停止したり変数に何が入っているかを確認してみましょう。
x86_64環境でシステムコールを発行する
「1日待ってください。本物のシステムコールをお見せしますよ。」
と言ってしまったので、C言語からインラインアセンブラを使ってシステムコールを実行することになった時のメモです。
Emacsで保存時に句読点を全角コンマと全角ピリオドに置換する設定
様式か、風習か、日本語で論文を書くときは「、」や「。」は「,」と「.」に置き換えなくてはいけない。
句読点の設定はだいたいどのIMEにもあるメジャーな設定なのでそこまで困ることではないが、グローバルに変更されると他の文章も全て全角コンマ・ピリオドになるためなかなか使い勝手が悪い。
どうせなのでTeX modeの時は保存時に句読点を全角コンマと全角ピリオドに置換してくれるEmacs Lispを書いた。
(defun replace-dot-comma () "s/。/./g; s/、/,/g;する" (interactive) (let ((curpos (point))) (goto-char (point-min)) (while (search-forward "。" nil t) (replace-match ".")) (goto-char (point-min)) (while (search-forward "、" nil t) (replace-match ",")) (goto-char curpos) )) (add-hook 'tex-mode-hook '(lambda () (add-hook 'before-save-hook 'replace-dot-comma nil 'make-it-local) ))
これで執筆中は何も考えることなく「、」と「。」を使うことができ、保存時には勝手に「,」と「.」に置換してくれる。
ブート時に途中から画面が真っ暗で表示されなくなる時のtips
ブートローダの選択画面やブートの途中までは画面に映るのに、ある途端から画面が真っ暗になったり、バックグラウンドで処理は行われているのに画面が停止した際の解決法。
nvidiaのプロプライエタリドライバを使用していることが前提。
原因はカーネルのオプションの選択ミスで、DRMというカーネルオプションを無効にしてドライバを再コンパイルすると直った。
詳しくはこちら NVidia/nvidia-drivers - Gentoo Wiki
DRMというのはDirect Rendering Managerといい、モダンなビデオカードを扱うためのインタフェースとのこと。
これがLinux kernelのものとドライバのもので競合を起こしていたのが原因の様子。
原因というか、.configファイルを消してしまったのが一番痛い。