lsを読む
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
]
開始行:
#contents
*はじめに [#d1b9bdd7]
[[青木峰郎さんは「lsのソースを読んでないのはプログラマと...
ls -l
とした場合に何が行われるかを眺めましょう。
なお今回対象としたバージョンはcoreutils 5.97に含まれてい...
*処理の流れ [#g1a19e27]
ではmain関数を眺めてみます。ざっと眺めると以下のブロック...
+表示内容の設定
+ファイル情報の表示
それぞれ見ていくことにしましょう。
*表示内容の設定 [#w39d7b78]
**decode_switches() [#dabcf01d]
まずdecode_switch関数を呼んでデフォルト値の設定やオプショ...
:time_type|time_mtime
:sort_type|sort_name
:numeric_ids|false
:indicator_style|none
:dereference|DEREF_UNDEFINED
:immediate_dirs|false
:ignore_mode|IGNORE_DEFAULT
次に環境変数とかから値を設定しています。へ〜って思ったの...
#ifdef TIOCGWINSZ
{
struct winsize ws;
if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &ws) != -1
&& 0 < ws.ws_col && ws.ws_col == (size_t) ws.ws_col)
line_length = ws.ws_col;
}
#endif
って、-lだとこの値使ってませんね。
次にオプションを解析しています。-lしか付けてないので変化...
:format|long_format
最後にformatがlong_formatなのでlong_time_formatの設定をし...
**残りの設定 [#fd35179e]
main関数に戻るとまだ設定されていない値が設定されています。
:dereference|DEREF_NEVER
:format_needs_stat|true
:format_needs_type|false
*ファイル情報の表示 [#eb43ae04]
表示内容の設定が終わったので次にファイル情報の表示をして...
今までの流れからfile_indexは0です。pending_dirsはさっきqu...
**print_dir() [#e66434f7]
再帰の部分は無視します。普通にopendir関数とかを呼んでディ...
+ファイル情報の取得
+ファイル情報のソート
+ファイル情報の表示
***gobble_file() [#e51e44c1]
ではファイル情報の取得です。え〜っと、いきなり超絶なifが...
dereferenceはDEREF_NEVERなのでlstatでファイル情報を拾って...
次のACL情報を拾っているのは、有効なのかどうかわかりません...
次にシンボリックリンクの処理を行っています。リンク先を設...
次、ファイルタイプの設定を行っています。
その後、各フィールドの長さを拾って表示する際の最大長を設...
***sort_files() [#ubdf4660]
ファイル情報が取得できたのでsort_typeに応じて普通にソート...
***print_current_files() [#g2aa3c1d]
各々のファイルについて、formatはlong_formatなのでprint_lo...
まずアクセス権を文字列化しています。mode_string関数はlib/...
次、ファイル日時情報を拾っています。get_stat_*time関数はl...
表示する情報をバッファに突っ込んで・・・、所有者とかを表...
日付の表示は6ヶ月以上前かどうかでスタイルを変えています。...
その後、印字可能かどうかを考慮した上でファイル名とシンボ...
*おわりに [#q4a391fd]
以上、ls -lの挙動を見てきました。今回は感想ではなく青木さ...
-引数によっていろいろ挙動が変わる
-変数はどこでどう設定されるのかをちゃんと把握しておく必要...
-UNIX系OSのAPIがいろいろ使われている
ということを読んでいて感じた→ということを知っておいた方が...
終了行:
#contents
*はじめに [#d1b9bdd7]
[[青木峰郎さんは「lsのソースを読んでないのはプログラマと...
ls -l
とした場合に何が行われるかを眺めましょう。
なお今回対象としたバージョンはcoreutils 5.97に含まれてい...
*処理の流れ [#g1a19e27]
ではmain関数を眺めてみます。ざっと眺めると以下のブロック...
+表示内容の設定
+ファイル情報の表示
それぞれ見ていくことにしましょう。
*表示内容の設定 [#w39d7b78]
**decode_switches() [#dabcf01d]
まずdecode_switch関数を呼んでデフォルト値の設定やオプショ...
:time_type|time_mtime
:sort_type|sort_name
:numeric_ids|false
:indicator_style|none
:dereference|DEREF_UNDEFINED
:immediate_dirs|false
:ignore_mode|IGNORE_DEFAULT
次に環境変数とかから値を設定しています。へ〜って思ったの...
#ifdef TIOCGWINSZ
{
struct winsize ws;
if (ioctl (STDOUT_FILENO, TIOCGWINSZ, &ws) != -1
&& 0 < ws.ws_col && ws.ws_col == (size_t) ws.ws_col)
line_length = ws.ws_col;
}
#endif
って、-lだとこの値使ってませんね。
次にオプションを解析しています。-lしか付けてないので変化...
:format|long_format
最後にformatがlong_formatなのでlong_time_formatの設定をし...
**残りの設定 [#fd35179e]
main関数に戻るとまだ設定されていない値が設定されています。
:dereference|DEREF_NEVER
:format_needs_stat|true
:format_needs_type|false
*ファイル情報の表示 [#eb43ae04]
表示内容の設定が終わったので次にファイル情報の表示をして...
今までの流れからfile_indexは0です。pending_dirsはさっきqu...
**print_dir() [#e66434f7]
再帰の部分は無視します。普通にopendir関数とかを呼んでディ...
+ファイル情報の取得
+ファイル情報のソート
+ファイル情報の表示
***gobble_file() [#e51e44c1]
ではファイル情報の取得です。え〜っと、いきなり超絶なifが...
dereferenceはDEREF_NEVERなのでlstatでファイル情報を拾って...
次のACL情報を拾っているのは、有効なのかどうかわかりません...
次にシンボリックリンクの処理を行っています。リンク先を設...
次、ファイルタイプの設定を行っています。
その後、各フィールドの長さを拾って表示する際の最大長を設...
***sort_files() [#ubdf4660]
ファイル情報が取得できたのでsort_typeに応じて普通にソート...
***print_current_files() [#g2aa3c1d]
各々のファイルについて、formatはlong_formatなのでprint_lo...
まずアクセス権を文字列化しています。mode_string関数はlib/...
次、ファイル日時情報を拾っています。get_stat_*time関数はl...
表示する情報をバッファに突っ込んで・・・、所有者とかを表...
日付の表示は6ヶ月以上前かどうかでスタイルを変えています。...
その後、印字可能かどうかを考慮した上でファイル名とシンボ...
*おわりに [#q4a391fd]
以上、ls -lの挙動を見てきました。今回は感想ではなく青木さ...
-引数によっていろいろ挙動が変わる
-変数はどこでどう設定されるのかをちゃんと把握しておく必要...
-UNIX系OSのAPIがいろいろ使われている
ということを読んでいて感じた→ということを知っておいた方が...
ページ名: