Slip Ahead Logging

It's not your fault at all.

/dev/stdin

(メモ途中)

node.js では標準入力から同期的な読み込みをする方法がないと思っていたが,次のような抜け道があったようだ.

node.jsで標準入力からまるっと読み込むには fs.readFileSync('/dev/stdin'); が一番簡単らしい。

https://twitter.com/#!/__gfx__/status/155861159428374528

こうした標準入力はプロセス毎に用意されるものだと考えていたため,とても奇妙に見える.改めて確認したところ /dev/stdin は /proc/self/fd/0 へのシンボリックリンクであった./proc/self ディレクトリは,アクセスを試みたプロセスのプロセス情報ディレクトリ (プロセス ID が PID のとき /proc/PID) へのシンボリックリンクとなるようになっており,結果としては標準入力はきちんとプロセス ID 毎に用意されている.

/proc/${PID}/fd/0 との関係はいかに? と思ったので調べることに.試しに,端末から標準入力を読み込むプログラムの fd を覗く.

$ ls -l /proc/18283/fd/{0,1,2}
lr-x------ 1 mooz mooz 64 2012-01-08 13:44 /proc/18283/fd/0 -> /dev/pts/0
lr-x------ 1 mooz mooz 64 2012-01-08 13:44 /proc/18283/fd/1 -> /dev/pts/0
lr-x------ 1 mooz mooz 64 2012-01-08 13:44 /proc/18283/fd/2 -> /dev/pts/0

/dev/pts/0 へのシンボリックリンクとなっているようだ.pts が何者か分からないので man pts とする.

pts(4) - Linux manual page

ptm (pseudo terminal master) と pts (pseudo terminal slave) について説明している.pty との違いは?