lsコマンドのソース(FreeBSD版)

http://www.freebsd.org/cgi/cvsweb.cgi/src/bin/ls/

Rev.1.86のls.c

  • 「-D」オプションが追加されている
  • 関数はmain ⇒ traverse ⇒ displayの流れで実行
  • 関数ポインタが使われている
  • fts関数しらない
ls -a -l dir

と実行したとき

0 1 2 3
ls -a -l dirname

getoptの解析完了時にはoptindは3。

341   argc -= optind;
342   argv += optind;

argcは4-3で1
argvはdirname文字列を指す位置に移動

461   if (argc)
462     traverse(argc, argv, fts_options);
463   else
464     traverse(1, dotav, fts_options);

traverse(argc, argv, fts_options)を実行

dirnameが渡されてなかったらargcは3-3で0なのでtraverse(1, dotav, fts_options)を実行