何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『 Linuxプログラミングインタフェース』を気合いで読む会 第5回:6章プロセス:コマンドラインパラメータ

nechoとは

Linuxプログラミングインタフェース』6章はプロセスの話。 とりあえずすぐに書けそうだった(というより散々書いてきた)コマンドラインパラメータ取得のサンプルコードをPythonおよびRustで書いてみる。

C言語の場合はargcargvであるが、それらの変数はmain()の引数としてしか参照できないという問題がある。 他の関数でコマンドライン引数を使いたい場合はargvを明示的に渡す必要がある。 Linuxの場合は、/proc/self/cmdlineからコマンドラインパラメータが取得できる。 GNU Cライブラリにはプログラム名を取得できるグローバル変数が定義されている。

さて、PythonおよびRustではどのようにするのか。

Python

  • sys.argvコマンドライン引数のリストとなるので、それをそのまま活用する。
  • -cオプションをつけて起動した場合、スクリプト名を指定せず起動した場合でsys.argv[0]の値が異なることに注意。
import sys


def main():
    for idx, arg in enumerate(sys.argv):
        print(f"argv[{idx}] = {arg}")


if __name__ == "__main__":
    main()

Rust

use std::env;

fn main() {
    for (idx, arg) in env::args().enumerate() {
        println!("argv[{}] = {}", idx, arg);
    }
}

感想

  • tlpiのサンプルコードのファイル名がnecho.cであるのだが、nechoとは何者だろうか。サポートページから察するに何かをechoしているのはわかるのだが、nは何を意味するのか。