FrontPage

パイプでつなぐ

1968年、UNIXの産みの親であるKen ThompsonとDennis RitchieがAT&Tのベル研究所でMulticsと呼ばれる大型のオペレーティングシステムを開発していた頃、「インタラクティブで便利なコンピュータサービス」が欲しいと言って作ったのがUNIXです。

彼らは、「ベル研の文書処理システムを作る」と言って予算を引き出し、PDP-11(システムメモリ16Kバイト、ユーザメモリ8Kバイト、ハードディスク512Kバイト)という現在のPDA以下のハードウェアを購入し、その上に現在のUNIXシステムのコマンド群とroffと呼ばれる文書処理システムを構築したのでした。

今では、Linuxの普及により誰でもUNIXの環境を持つことができるようになりました。

UNIXの3大発明

今回は、「パイプでつなく」をテーマにUNIXの偉大な大発明の中から、

について例題を交えながら説明していきます。

パイプを使った処理の例

パイプを使った処理の例として、「tr」コマンドのmanページの単語の種類をカウントします。

$ man tr | tr -cs 'A-Za-z' '\n' | sort -u | wc -l
     492

このようにUNIXのコマンドをパイプでつなくことによって簡単に必要な処理をこなすことができます。

「単語処理の例」は、別にパイプを使わなくてもファイルを使って逐次的に処理できます。 パイプがファイルと決定的に異なる点は、リアルタイムの処理です。

図は、マウスイベントを別Windowにプロットする例です。 demo_pipeline.jpg

このデモでは、xevコマンドとEvent2Plot, Graphのシェルスクリプトをパイプでつないで、xplotの画面にイベントをリアルタイムでプロットします。

$ xev | Event2Plot | Graph

パイプのつなぎ方

pipeシステムコールは、本当に不思議な関数です。自分が出力したものを自分へ送るストリームの輪(パイプ)がpipeシステムによって生成されます。 マニュアルでこのような説明を読んだだけでpipeシステムコールの使い方を理解できる人は少ないでしょう。

pipe.jpg

fork.jpg

close.jpg

dup.jpg

パイプを実現する3つのシステムコール

fork システムコールのおさらい

pipe システムコールの使い方

dup システムコールの使い方

パイプをつなぐCサンプル

sh でのパイプの使われ方

パイプ(|)

バックアクセント(`)

ヒアドキュメント(<<EOF)

簡単シェルスクリプト

おさらい

おきまりのパターン

シェルスクリプトTIP集

皆様のご意見、ご希望をお待ちしております。 


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
SmartDoc