2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBSDAdvent Calendar 2024

Day 10

NetBSD-10で新たに追加されたユーザランドのコマンド

Posted at

NetBSD Advent Calendar 2024 10日目の記事です。今日はNetBSD-10で新たに追加されたユーザランドのコマンドを見てみようと思います。

NetBSD-10のリリースノートの"New userspace programs"に新たに追加されたコマンドの説明があります。どうやら以下のコマンドが追加されているようです。

これらのコマンドを順に見てみます。

aiomixer(1)

aiomixer(1)curses(3)ベースのオーディオミキサーです。音量などはCUIツールのmixerctl(1)でも設定可能ですが、設定したい値(パラメータ)をその都度確認して設定するのはちょっと面倒です…。

$ mixerctl -a | grep master
outputs.master=127,127
$
$ # 音量を設定する。
$ mixerctl -w outputs.master=140,140
outputs.master: 127,127 -> 143,143

aiomixerを使用することで、CUIでも音量やミュートと言ったサウンドデバイスで頻繁に設定する項目を楽に設定できます。

img01.PNG

realpath(1)

realpath(1)は相対パスを絶対パスに変換(正規化)するコマンドです。

$ realpath /usr/src
/usr/src
$
$ realpath /usr/src/../../usr/src/../src
/usr/src

manページを見ると、FreeBSD-4.3で追加された realpath(3) をNetBSD-10に取り込んだという経緯のようです(逆に今までNetBSDに入ってなかったのか…とも思います)。また、その際にGNU Coreutils版のrealpath(3)との互換性を高める修正が追加されているとのことです。

tradcpp(1)

tradcpp(1)はK&RスタイルのCマクロ・プロセッサです。Cコンパイラがインストールされていない環境でCプリプロセッサの利用を想定し(設定ファイルでCプリプロセッサマクロを使用するケースがあるのだとか)、ベースコマンドに含めているとのこと。

例として、以下のようなCプリプロセッサマクロの展開を考えてみます。

/* foo.h */

#include <bar.h>
#include <bar.h>

char str[] = STR
char join_str[] = JOIN_STR(HELLO, WORLD)
/* bar.h */

#ifndef BAR_H
#define BAR_H

#define STR "HELLO"
#define JOIN_STR(x, y) x ## y

#endif /* BAR_H */

tradcpp でプリプロセッサに通してみます。ifndef による多重インクルードガードとマクロ定数の展開は行えますが、 ## によるシンボルの連結は行えないようです。

$ tradcpp -I. bar.h
$ tradcpp -I. foo.h
...
char str[] = "HELLO"
char join_str[] = HELLO ##  WORLD

cpp コマンドであれば、 ## によるシンボルの連結も行えます( ## 記法はK&Rスタイルのプリプロセッサではサポートされていないという話かと思います)。

$ cpp -I. foo.h
# 1 "foo.h"
# 1 "<built-in>"
# 1 "<command-line>"
# 1 "foo.h"


# 1 "./bar.h" 1
# 4 "foo.h" 2


char str[] = "HELLO"
char join_str[] = HELLOWORLD

ioctlprint(1)

ioctlprint(1)ioctl(2)で指定可能なリクエストの一覧を出力するコマンドです。

$ ioctlprint -l
DRVRESUMEDEV    _IOW('D', 126, struct devpmargs)        0x8014447e
HPCFBIO_GDSPCONF        _IOWR('H', 2, struct hpcfb_dspconf)     0xc0784802
...
KFILTER_BYNAME  _IOWR('k', 1, struct kfilter_mapping)   0xc0186b01
TIOCSPGRP       _IOW('t', 118, int)     0x80047476
$
$ ioctlprint -l | wc -l
    1549

リクエスト一覧は得られるのですが、どのデバイスに対してリクエスト可能な値なのかがパッと見では分からないため、べつのコマンド(またはソースコード)と照らし合わせて使用する感じになりそうです。

testpat(6)

testpat(6)は端末上にテストパターンを表示するコマンドです。こちらもcurses(3)を使用しています。

img02.PNG

warp(6)

warp(6)はCUIベースの"a real-time space war game"というゲームのようです。操作方法がよく分からずググってみたのですが、解説サイト等は見つけられませんでした。

img03.PNG

ちなみに、このゲームはPerl言語で有名なLarry Wallさんによる作品とのことです。

fsck_udf(8)

fsck_udf(8))UDF(Universal Disk Format)に対するファイルシステムのチェックと(必要に応じて)リペアを実行するコマンドです。インストールCDから起動した際にディスクのチェックを行うような機能を提供するコマンドと考えると理解しやすいかと思います。

まとめ

NetBSD-10で新たに追加されたユーザランドのコマンドをざっと眺めてみました。実運用での利用が想定されるものから、サンプル的な位置づけのものもあり、もう一歩踏み込んで使い込んでみるとより面白い発見がありそうです。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?