chargeのブログ

人のブログを見て真似して書いていきます。似たブログを見つけたら教えてください。

シェルスクリプトはなぜ遅いか

2012-02-14 08:43:00 | インポート
連続処理させるスクリプトを作るときにC言語でコンパイルしたものよりシェルスクリプトを使うと遅くなる。
原因は演算速度よりもファイルへのアクセス速度の問題でシェルスクリプトではファイルをいちいち開け閉めするからである。
そこでこんな感じにしたいと思う。

http://mugos.ums.ac.id/pub/artikel/debian-www/doc/manuals/reference/ch-program.ja.html


13.2.4 シェルリダイレクト

覚えておくべき基本的な リダイレクト を次に挙げます。 (ここで [<var>n</var>] はファイルディスクリプタを指定するための任意の 番号)

     [<var>n</var>]> <var>file</var>      stdout (又は<var>n</var>) を <var>file</var> にリダイレクト。
     [<var>n</var>]>> <var>file</var>     stdout (又は<var>n</var>) を <var>file</var> に追加
     [<var>n</var>]< <var>file</var>      <var>file</var> から stdin (又は<var>n</var>) にリダイレクト
     [<var>n1</var>]>&<var>n2</var>       stdout (又は <var>n1</var>) を <var>n2</var> にリダイレクト
     2> <var>file</var>  >&2   stdout と stderr を <var>file</var> にリダイレクト
      > <var>file</var> 2>&1   stdout と stderr を <var>file</var> にリダイレクト
     | <var>command</var>      stdout を <var>command</var> にパイプする
     2>&1 | <var>command</var> stderr と stdout を <var>command</var> にパイプする

ここで、

  • stdin: 標準入力 (ファイルディスクリプタ = 0)

  • stdout: 標準出力 (ファイルディスクリプタ = 1)

  • stderr: 標準エラー出力 (ファイルディスクリプタ = 2)

です。

シェルは任意のファイルディスクリプタにより exec 組込み コマンドを用いてファイルを開くことができます。

     $ echo Hello >foo
     $ exec 3<foo 4>bar  # ファイルを開く
     $ cat <&3 >&4       # 標準入力を 3, 標準出力を 4 にリダイレクト
     $ exec 3<&- 4>&-    # ファイルを閉じる
     $ cat bar
     Hello

ここで <var>n</var><&- と <var>n</var>>&- はファイルディスクリプタ <var>n</var> を閉じることを意味します。


こうすれば何ぼかましになるであろう。


最新の画像もっと見る

コメントを投稿