nechoとは
『 Linuxプログラミングインタフェース』6章はプロセスの話。 とりあえずすぐに書けそうだった(というより散々書いてきた)コマンドラインパラメータ取得のサンプルコードをPythonおよびRustで書いてみる。
C言語の場合はargc
とargv
であるが、それらの変数は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
- コマンドライン引数は
std::env::args()
関数から取得できる。 std::env::args()
の返り値はイテレータなので、enumerate()
が使える。- ほぼ、Python版と同じですね。
use std::env; fn main() { for (idx, arg) in env::args().enumerate() { println!("argv[{}] = {}", idx, arg); } }
感想
- tlpiのサンプルコードのファイル名が
necho.c
であるのだが、necho
とは何者だろうか。サポートページから察するに何かをechoしているのはわかるのだが、n
は何を意味するのか。