Amazon.co.jp ウィジェット 2011年2月 Archive - PC破壊日記的ブログ

Home > Archives > 2011年2月 Archive

2011年2月 Archive

vsftpdは一部の情報が標準入力から出力されるようです。

このエントリーをはてなブックマークに追加

先日、ある方の一言、
「vsftpdのバージョン情報がファイルに記録できない」
から、ちょっと調査を開始。

*nux系(UNIX,Linux)OSの場合、プログラムからの出力(標準出力)
をファイルに記録する場合は、以下のように実行します。
program >output.txt

また、標準エラー出力と呼ばれる、標準出力とは別の部分に出力されている場合は、
program 2>output_err.txt

これら2つを一つのファイルに出力する場合は、以下のようにします。
program >output_dual.txt 2>&1
最後の2>&1は、2(標準エラー出力)に出力されたメッセージを
標準出力に流すことを指示しています。
結果として、標準出力先に指定した一つのファイルに、標準出力と標準エラー出力の
両方のメッセージが記録されます。

これらは、Windowsのコマンドプロンプトでも同様に動作するようです。
(Windows7しか確認していませんが・・・)


しかしながら、vsftpdでバージョン情報を取得しようと、以下のコマンドを入力しました。
vsftpd -v >vsftpd_ver.txt 2>&1
しかし、コンソールにバージョン情報が出力されてしまい、ファイルには何も記録されません。

これはどういうことか。と、調査を開始しました。
まずは出力先を変更して確認。
vsftpd -v >vsftpd_ver.txt 3>&1
vsftpd -v >vsftpd_ver.txt 4>&1
:
vsftpd -v >vsftpd_ver.txt 10>&1
しかし、どれも同じで記録されません。

そこで、ふと思いました。「0は?」と。
で、以下のコマンドを発行しました。
vsftpd -v >vsftpd_ver.txt 0>&1
すると、見事にファイルにバージョン情報が記録されました。
もちろんコンソールには何もメッセージが出ていません。

そこで、さらに調査するため、vsftpdのソースを入手。
main関数から順番に追っかけて行ったところ、バージョン情報に関するメッセージは、
ファイルハンドル0に対して出力されていました。

そこで、ファイルハンドル0とは何ぞや?と調べたところ、
なんと「標準入力(stdin)」に対して出力されていたのです。
これでは出力先0をリダイレクトしないとファイルに記録されませんね。

ただ、標準入力に出力するこの状態、何か不具合が起こりそうで怖く感じます。
この内容を伝えたら、その方は代替案で対処したみたいですが・・・。


 

Index of all entries

Home > Archives > 2011年2月 Archive

2進数時計
※クリックで読みやすくなります。
※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません
Search
Feeds

Google Adsense
Tag Cloud

このページの最初に戻る