タグ

bashとCに関するiwwのブックマーク (4)

  • bashの組込みコマンド自作によるスクリプトの高速化 - 覚書

    はじめに bashには次の2つの理由によって、組み込みコマンド(builtin command)というものが存在します。 スクリプトの高速化のため。組み込みコマンドであれば通常のコマンドを実行する場合に比べてプロセスの生成コスト(fork()/exec())が削減できる bash自身の状態を変更させるため。例えばcdコマンドを/bin/cdとして用意してbashから当該コマンドを実行しても、当該コマンドのpwdが変更されるだけで、bashのそれは変更されないため、意味がない 今回は前者に焦点を合わせて、その効果と、組み込みコマンドの自作方法について述べます。 予備知識: 組込みコマンドによるスクリプト高速化の効果 組込みコマンドそのものの存在、及びその存在意義について既にご存知のかたは、この節を飛ばしてもらって構いません。 例えば皆さんがbashスクリプトからechoコマンドを実行した場合

    bashの組込みコマンド自作によるスクリプトの高速化 - 覚書
  • Man page of GETPWNAM

  • 革命の日々! systemの挙動について

    ちょっとakrさんと議論する機会があったのでメモ 現状のRubyだと子プロセス実行中に Ctrl-Cが効かないという問題がある http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31007 実際に、困っているひともいて。Rubyのtarに含まれているmake testが子プロセスをつくって子供がテストして結果をかえすというスタイルなので、Ctrl-Cで中断できなくて開発者は日々イライラしている。 で、このスレッドで、そうなっている理由が明らかに。 http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-dev/31117 ところで、別件であるがperl の真似をしたといいつつ、perlはSIGHUPをマスクしてはいない。 ちょっと気になったので実装をいくつか調べてみた。

  • ARG_MAXとshell組み込みコマンド(bash) - 半径5メートル

    twitterのfriend timelineのログをファイルベースでログとってたら*1、気がつくとarchiveのディレクトリに5万件超のファイルが蓄積されていました。 これだけの件数のファイル群はrmコマンドで一気に消そうとしても、消せません。 -bash-3.00$ rm * -bash: /bin/rm: 引数リストが長すぎますこの引数リストの長さの上限はARG_MAXというマクロ定数で定義されているようです。 -bash-3.00$ getconf ARG_MAX 131072ARG_MAXの制限により、コマンドに渡す引数が(うちの環境では)131072byteを超えてしまうと上記のエラーになってしまいます。この場合は一つのファイルが「786587805」のような名前で保存されている為、5万件超のファイルを指定する「*」のファイルグロブが展開されたファイルリストの文字列が余裕で1

    ARG_MAXとshell組み込みコマンド(bash) - 半径5メートル
  • 1