UNIX/C言語の謎めいた略語たち
概要
C言語でよく使われる関数・マクロ名やOSの機能に関係するような単語などは、昔のプログラミング環境における文字数制約などのせいかやたらと略語が使われがちで呪文のようになっていることがよくある。
こんな呪文をすらすら解読できたらかっこいいだろうが、正直凡人にとっては可読性はかなり良くない。
登場当時の制約のもとでは仕方のない部分もあったのだろう。しかし、現代の慣習から見ればわかりにくいと思われる部分もかなりある。
こういった命名のわかりにくさは、C言語自体やC言語を使ったシステムプログラミングに挫折してしまう要因のひとつになっているのではないかと思っている (自分自身がそうであった)。
筆者はよくわからない関数名,マクロ名などに遭遇すると命名の起源を探す旅に出てしまうことが多く、幾度となく作業時間を溶かしてきた。
この記事は、筆者自身や筆者のように命名探しの旅に出てしまう癖をもった困った読者に向けて、これまで筆者自身がぱっと見で解読に困った名前をできるかぎりまとめてみようという試みである。
現時点でとても網羅的といえるものではないが、これからも追加すべきと思うものがあれば随時追加していきたいと思っている。
(これもリストにあったほうが良いなどもしコメントいただけたら嬉しい。)
目的
この記事の目的は、わかりにくい略語のもととなっている命名を明らかにすることである。
命名を理解することの結果として次のような効果を期待する。
- 命名に対する納得感を上げる、覚えやすくする。
- 略称のもととなっている単語を通して関連するトピックを検索しやすくする。
逆に、略される前の単語の意味について説明することはしない。これはひとつの記事で説明するには膨大すぎるし、内容的にも筆者の力量には余る。
UNIX 用語
基本的に単独で意味をなすUNIX用語
-
acl
: access control list -
cwd
: current working directory -
fd
: file descriptor -
fs
: file system -
fuse
: filesystem in userspace -
ipc
: inter process communication -
lvm
: logical volume manager -
oom
: out of memory -
pcap
: packet capture -
pid
: process id -
ppid
: parent process id -
ptmx
: pserudo terminal master (x はどこ?) -
pts
: pseudo terminal slave -
pty
: pseudo terminal -
shm
: shared memory -
tty
: teletypewriter -
vfio
: virtual function i/o -
vfs
: virtual filesystem -
vm
: virtual memory- "virtual machine" のこともある
-
xdp
: express data path
libc (C Standard Library) の用語
実行ファイル (ELF) 関連
-
plt
: procedure linkage table -
got
: global offset table
他の略語の一部として使われることが多い一般名詞
-
attr
: attribute -
blk
: block -
cntl
: control -
def
: define / definition -
dev
: device- UNIX用語としては "device" が多いが、一般的には "develop" のこともある
-
env
: environment -
grp
: group -
msg
: message -
rc
: run commands- 設定ファイルの名前に使われる (e.g.
bashrc
)
- 設定ファイルの名前に使われる (e.g.
-
stat
: status -
std
: standard -
◯◯d
: ◯◯ daemon
ファイル階層
Filesystem Hierarchy Standard (FHS)
-
/bin
: binary files -
/dev
: device files -
/etc
: etcetera- "editable text configuration" という解釈もある
-
/sbin
: system binaries -
/tmp
: temporary files -
/var
: variable files
/dev/*
-
/dev/sda
,/dev/sdb/
, ...: SCSI device- 現在は SCSI に限らずディスクデバイス全般[4]
/etc/*
-
/etc/fstab
: filesystem table -
/etc/mtab
: mounted (file system) table
コマンド名
-
ar
: archive -
cd
: change directory -
cp
: copy -
dd
: data definition[5][6] -
fc
: fix command -
fsck
: file system check -
grep
: global + regex + print-
ed
エディタ由来
-
-
ld
: loader (or link-editor) -
ln
: link -
ls
: list directory contents- 派生:
lshw
(list hardware),lscpu
,lsof
(list open files), ...
- 派生:
-
mv
: move -
nm
: name mangling -
pwd
: print working directory -
sed
: stream editor -
su
: switch user (or substitute user) -
uname
: unix name
ヘッダファイル名
標準ヘッダファイルのリスト なども参考に
-
ctype.h
: character type -
dlfcn.h
: dynamic linking functions -
fcntl.h
: file control -
ftw.h
: file tree walking -
sched.h
: scheduling -
stdio.h
: standard i/o -
stdlib.h
: standard library -
termios.h
: terminal i/o settings (?) -
unistd.h
: unix standard -
sys/mman.h
: memory management -
sys/sem.h
: semaphore -
sys/un.h
: unix domain socket -
sys/utsname.h
: unix time-sharing system name[7]
関数名・マクロ名 (ヘッダファイル別)
基本グローバル名前空間に直に名前が定義されるので、名前空間のかわりになんらかの接頭辞をつけていることが多い。
ターミナル
termios.h
-
tc*
,TC*
: terminal control- e.g.
tcgetattr()
,TCSANOW
(SA
= set attribute)
- e.g.
-
cf*
: control flags-
cfmakeraw
,cfgetispeed
(ispeed = input speed) [8]
-
-
struct termios
のフラグ
参考
sys/ioctl.h
-
TIOC*
: terminal i/o control-
TIOCGWINSZ
,TIOCSWINSZ
:TIOC
+ get/set window size
-
参考
unistd.h
-
lseek()
: long seek- 昔はただの
seek()
があったらしい (link)
- 昔はただの
-
_SC_*
: system config- e.g.
_SC_PAGESIZE
- e.g.
sys/fcntl.h
-
O_*
: open- e.g.
O_RDONLY
,O_WRONLY
,O_APPEND
,O_CREAT
, ...
- e.g.
sys/mman.h
-
mmap()
: memory mapping -
PROT_*
: protection- e.g.
PROT_READ
,PROT_WRITE
,PROT_EXEC
- e.g.
sys/stat.h
-
S_I*
: stat + inode [11]- e.g.
S_IFMT
(file mode type (?)),S_IRUSR
(read permission of user (owner)),S_IRWXU
(read, write and execute permission of user)
- e.g.
sys/mount.h
-
MS_*
: mount setting (?)- 出典見つからず。情報求む
ソケット通信
sys/socket.h
-
AF_*
: address family- e.g.
AF_INET
,AF_UNIX
- 基本的に同じ意味の
PF_*
は protocol family
- e.g.
netinet/in.h
-
struct sockaddr_in
: socket address internet -
sin_*
: socket + internet-
sockaddr_in
構造体のメンバの名前に使われる - e.g.
sin_family
,sin_port
, ...
-
sys/un.h
-
struct sockaddr_un
: socket address unix -
sun_*
: socket + unix-
sockaddr_un
構造体のメンバの名前に使われる - e.g.
sun_family
,sun_path
, ...
-
arpa/inet.h
- byte order 変換
-
htons()
: host byte order to network byte order (short (16bit) integer) -
htonl()
:htons()
の long (32bit) 版 -
ntohs()
,ntohl()
: network to host
-
netdb.h
-
ai_*
: address info-
struct addrinfo
のメンバ: (e.g.ai_flags
,ai_family
, ...) - マクロ名: (e.g.
AI_ADDRCONFIG
,AI_PASSIVE
, ...)
-
-
EAI_*
: error of address info- e.g.
EAI_AGAIN
,EAI_BADFLAGS
, ...
- e.g.
固有名詞
-
(e)BPF
: (Extended) Berkeley Packet Filter -
BSD
: Berkeley Software Distribution -
ELF
: Executable and Linkable Format -
LSM
: Linux Security Module -
POSIX
: portable operating system interface -
SELinux
: Security Enhanced Linux
参考
The Linux Programming Interface
-
Stack Overflow: Why does an assembly program only work when linked with crt1.o crti.o and crtn.o? ↩︎
-
Wikipedia: dd (Unix) より引用: According to Dennis Ritchie, the name is an allusion to the DD statement found in IBM's Job Control Language (JCL),[3][4] in which it is an abbreviation for "Data Definition". ↩︎
-
Stack Overflow: What's the meaning of "utsname" in Linux? ↩︎
-
LinuxQuestion.org: what does prefix "tc" and "cf" in "termios.h" mean? ↩︎
-
"X" が transmit なのは何で? って感じだけど、一般に trans -> X に略されがちらしい https://english.stackexchange.com/questions/37394/why-do-some-words-have-x-as-a-substitute ↩︎
Discussion