リンク
インターシステムズ(日) └日本語ドキュメント インターシステムズ(US) (有)エムブイビイ ダイナシステム(株) Googleグループ(英語) Googleグループ(日本語) George James Software cache'infoアーカイブ 【広告】
|
pipe経由の入出力pipe I/O
「Linuxシェルなどで使用されるパイプをCache'と組み合わせることができるのか」 という質問を頂きましたので調べてみました。 パイプとリダイレクション
パイプとは、あるプログラムの標準出力を他のプログラムの標準入力として使う仕組みです。
次の例は、ps aux でプロセスの一覧を出力し、パイプを経由して grep apache に渡して、apache という文字列が含まれる行だけを出力しています。 # ps aux | grep apache リダイレクションとは、標準入出力先を変更する仕組みです。 次の例は、ls -al でファイルの一覧を出力し、結果を /tmp/ls.txt に出力しています。 # ls -al > /tmp/ls.txt
Unixのシェルなどでよく使われるパイプやリダイレクションですが、これをCache'と組み合わせることが出来れば便利そうです。 パイプからの入力
パイプからの入力は標準入力として渡されます。
Cache'でデバイスからの入出力を行うときに、どのデバイスに対して操作を行うかを指定するコマンドがOpenコマンド、Useコマンドです。 標準入力はデバイスID 0として定義されています。また、デフォルトで開かれていますので、Openする必要はありません。 標準入力から渡された内容を ^x グローバルに格納するプログラムを、以下のように作成してみました。 Do $ZUtil(68,40,1) //このプロセスで$ZEOF検出を有効にする For i=1:1 { Quit:$ZEOF Use 0 Read dat Set ^x(i)=dat } Do $ZUtil(68,40,0) Quit psコマンドの出力を、作成したプログラムで受け取るには以下のように記述します。 $ ps au | cache -U USER PipeIn^TEST 実行後、^x
グローバルの内容を確認してみます。USER>zw ^x このように、パイプからの入力を受け取る事ができました。^x(1)="USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND" ^x(2)="root 3724 0.0 0.0 3792 484 tty1 Ss+ Aug20 0:00 /sbin/mingetty tty1" ^x(3)="root 3725 0.0 0.0 3792 480 tty2 Ss+ Aug20 0:00 /sbin/mingetty tty2" ^x(4)="root 3734 0.0 0.0 3792 480 tty3 Ss+ Aug20 0:00 /sbin/mingetty tty3" ^x(5)="root 3735 0.0 0.0 3792 484 tty4 Ss+ Aug20 0:00 /sbin/mingetty tty4" ^x(6)="root 3736 0.0 0.0 3792 480 tty5 Ss+ Aug20 0:00 /sbin/mingetty tty5" ^x(7)="root 3745 0.0 0.0 3792 484 tty6 Ss+ Aug20 0:00 /sbin/mingetty tty6" ^x(8)="root 3831 0.0 0.1 83232 5596 tty7 Ss+ Aug20 0:00 /usr/bin/Xorg :0 -br -audit 0 -auth /var/gdm/:0.Xauth -nolisten tcp vt7" ^x(9)="root 31206 0.0 0.0 66100 1608 pts/1 Ss 19:35 0:00 -bash" ^x(10)="root 31336 0.0 0.0 65628 972 pts/1 R+ 19:38 0:00 ps au" ^x(11)="root 31337 0.0 0.0 20820 3072 pts/1 S+ 19:38 0:00 /CacheSys/bin/cuxsession -s /CacheSys/mgr -U USER PipeIn^TEST" ^x(12)="" パイプへの出力
パイプからの入力と同様、デバイス 0 に対して Writeすることでパイプへ出力できます。
次のように、1秒毎に5回 $Hの値を標準出力に出力するプログラムを作りました。 For i=1:1:5 { Use 0 Write $H,! Hang 1 } Quit $ cache
-U USER PipeOut^TEST | sort -r
うまくソートできました。62694,74790 62694,74789 62694,74788 62694,74787 62694,74786 リダイレクション
パイプとリダイレクションはいずれも標準入力を経由するものですので、Cache'から見るとパイプと使い方は変わりません。
そのため先程のプログラムをそのまま使用することができます。 $ free > 1.txt $ cache -U USER PipeIn^TEST <1.txt $ cache USER> zw ^x ^x(1)=" total used free shared buffers cached" ^x(2)="Mem: 4044532 2341828 1702704 0 177252 612720" ^x(3)="-/+ buffers/cache: 1551856 2492676" ^x(4)="Swap: 786424 0 786424" ^x(5)=""
$ cache -U USER PipeOut^TEST > 1.txt $ cat 1.txt 62694,81243 62694,81244 62694,81245 62694,81246 62694,81247 リダイレクションの機能として、標準エラー出力をリダイレクトすることができるのですが、Cache'で標準エラー出力に出力する方法は不明です。。。 |