情弱ログ

参考にならないので当てにしないでください

カーネルからリンクダウン時のイベントを飛ばす処理を探す

あるインタフェースのリンク状態を確認するために、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)の使い方(中級編)

前回の記事でコアダンプからセグメンテーション違反の原因を探す方法を書きました。
今回はデバッガからプログラムを実行することで、実行中のプログラムを一時停止したり変数に何が入っているかを確認してみましょう。

続きを読む

1年生に送るデバッガ(gdb)の使い方(入門編)

長い夏休みが終わって、1年生はプログラミングⅡを履修すると思います。
プログラミングⅡではポインタ、ファイル入出力といった新しい概念を学んでいくことになります。
しかし、これらの発展的な内容は便利であると共にエンバグしやすい部分でもあります。

例えば「segmentation faultって出てプログラムが止まった…」「2回目以上呼び出した時の関数の挙動が怪しい…」といったバグを埋め込んだ時、ソースコードとにらめっこするかTAを呼んでないでしょうか。
それ、デバッガを使えば解決できるんですよ。

続きを読む

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)
             ))

これで執筆中は何も考えることなく「、」と「。」を使うことができ、保存時には勝手に「,」と「.」に置換してくれる。

今時Emacs上でTeXで論文書くような人はこんなのよりもっと便利なものを知ってそう

ブート時に途中から画面が真っ暗で表示されなくなる時のtips

ブートローダの選択画面やブートの途中までは画面に映るのに、ある途端から画面が真っ暗になったり、バックグラウンドで処理は行われているのに画面が停止した際の解決法。
nvidiaプロプライエタリドライバを使用していることが前提。

原因はカーネルのオプションの選択ミスで、DRMというカーネルオプションを無効にしてドライバを再コンパイルすると直った。
詳しくはこちら NVidia/nvidia-drivers - Gentoo Wiki

DRMというのはDirect Rendering Managerといい、モダンなビデオカードを扱うためのインタフェースとのこと。
これがLinux kernelのものとドライバのもので競合を起こしていたのが原因の様子。

原因というか、.configファイルを消してしまったのが一番痛い。