UNIX/C言語の謎めいた略語たち

2023/11/05に公開

概要

C言語でよく使われる関数・マクロ名やOSの機能に関係するような単語などは、昔のプログラミング環境における文字数制約などのせいかやたらと略語が使われがちで呪文のようになっていることがよくある。
こんな呪文をすらすら解読できたらかっこいいだろうが、正直凡人にとっては可読性はかなり良くない。

登場当時の制約のもとでは仕方のない部分もあったのだろう。しかし、現代の慣習から見ればわかりにくいと思われる部分もかなりある。
こういった命名のわかりにくさは、C言語自体やC言語を使ったシステムプログラミングに挫折してしまう要因のひとつになっているのではないかと思っている (自分自身がそうであった)。

筆者はよくわからない関数名,マクロ名などに遭遇すると命名の起源を探す旅に出てしまうことが多く、幾度となく作業時間を溶かしてきた。
この記事は、筆者自身や筆者のように命名探しの旅に出てしまう癖をもった困った読者に向けて、これまで筆者自身がぱっと見で解読に困った名前をできるかぎりまとめてみようという試みである。
現時点でとても網羅的といえるものではないが、これからも追加すべきと思うものがあれば随時追加していきたいと思っている。
(これもリストにあったほうが良いなどもしコメントいただけたら嬉しい。)

目的

この記事の目的は、わかりにくい略語のもととなっている命名を明らかにすることである。
命名を理解することの結果として次のような効果を期待する。

  • 命名に対する納得感を上げる、覚えやすくする。
  • 略称のもととなっている単語を通して関連するトピックを検索しやすくする。

逆に、略される前の単語の意味について説明することはしない。これはひとつの記事で説明するには膨大すぎるし、内容的にも筆者の力量には余る。

UNIX 用語

基本的に単独で意味をなすUNIX用語

  • acl: access control list
  • cwd: current working directory
  • fd: file descriptor
  • fs: file system
  • ipc: inter process communication
  • oom: out of memory
  • pid: process id
  • ppid: parent process id
  • ptmx: pserudo terminal master (x はどこ?)
  • pts: pseudo terminal slave
  • pty: pseudo terminal
  • shm: shared memory
  • tty: teletypewriter
  • vm: virtual memory
    • "virtual machine" のこともある

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)
  • stat: status
  • std: standard
  • ◯◯d: ◯◯ daemon

ファイル階層

Filesystem Hierarchy Standard

  • /bin: binary files
  • /dev: device files
  • /etc: etcetera
    • "editable text configuration" という解釈もある
  • /sbin: system binaries
  • /tmp: temporary files
  • /var: variable files

/etc 以下のファイル

  • /etc/fstab: filesystem table
  • /etc/mtab: mounted (file system) table

コマンド名

  • ar: archive
  • cd: change directory
  • cp: copy
  • 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

関数名・マクロ名 (ヘッダファイル別)

基本グローバル名前空間に直に名前が定義されるので、名前空間のかわりになんらかの接頭辞をつけていることが多い。

ターミナル

termios.h

  • tc*, TC*: terminal control

    • e.g. tcgetattr(), TCSANOW (SA = set attribute)
  • cf*: control flags

  • struct termios のフラグ

    • IXON: XON = "transmit on" (出典) [1]
      • 効果としては、^S, ^Q の出力停止/再開を有効にするフラグ

参考

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

sys/fcntl.h

  • O_*: open
    • e.g. O_RDONLY, O_WRONLY, O_APPEND, O_CREAT, ...

sys/mman.h

  • mmap(): memory mapping

  • PROT_*: protection

    • e.g. PROT_READ, PROT_WRITE, PROT_EXEC

sys/stat.h

  • S_I*: stat + inode
    • e.g. S_IFMT (file mode type (?)), S_IRUSR (read permission of user (owner)), S_IRWXU (read, write and execute permission of user)
    • source (stack overflow)

sys/mount.h

  • MS_*: mount setting (?)
    • 出典見つからず。情報求む

ソケット通信

sys/socket.h

  • AF_*: address family
    • e.g. AF_INET, AF_UNIX
    • 基本的に同じ意味の PF_* は protocol family

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, ...

固有名詞

  • ELF: Executable and Linkable Format
  • POSIX: portable operating system interface

参考

The Linux Programming Interface

https://man7.org/tlpi/

脚注
  1. "X" が transmit なのは何で? って感じだけど、一般に trans -> X に略されがちらしい https://english.stackexchange.com/questions/37394/why-do-some-words-have-x-as-a-substitute ↩︎

GitHubで編集を提案

Discussion