Windows 環境下で使用できない Windows ファイル名は
Cygwin 環境下でも使用出来ません。
つまり、AUX、COM1、LPT1 又は
PRNのような(幾つかの)ファイル名は、仮に拡張子
(prn.txt)をつけたとしても、通常の
Cygwin の Windows パス又は POSIX パスとしては利用出来ないということを意味します。
しかしながら、これらの特殊な名前は拡張子(file.aux)としては使用することが出来ます。
これらの特殊な名前は DOS 環境下と同じようにに使用出来ます。
例えば、cat filename > PRN を実行することによって、デフォルトのプリンタに対して出力することが出来ます(ファイルの最後が用紙送り文字(Form Feed)で終了するようにして下さい)。
POSIX の /dev ディレクトリを作成する必要はありません。
Cygwin が自動的に内部でシミュレートします。
これらのデバイスは、ls /dev/tty のようにしない限り、コマンド
ls /dev では表示されません。
/dev/ 以下の全てのデバイスを見えるようにしたければ、Igor Pechtchanski による
create_devices.sh
を利用することが出来ます。
Cygwin は POSIX システムで通常利用される、以下のデバイスをサポートしています:
/dev/dsp、/dev/null、
/dev/zero、/dev/console、
/dev/tty、/dev/ttym、
/dev/ttyX、/dev/ttySX、
/dev/pipe、/dev/port、
/dev/ptmx、/dev/mem、
/dev/random 及び /dev/urandom。
/dev/kmem のような他の POSIX デバイスの開発も予定されています。
Cygwin は様々な Windows 特有のデバイスもサポートしています:
/dev/comX(シリアルポートで、COM1
から始まります。ttyS0 と同じです)、
/dev/conin(Windows の CONIN$)、
/dev/conout(Windows の CONOUT$)、
/dev/clipboard(Windows のクリップボードですが、現在はテキストのみサポートしています)、
及び /dev/windows(Windows のメッセージキュー)。
加えて、Windows NT/W2K/XP ではフロッピー、ディスク、パーティションやテープのような raw デバイスをサポートしています。 二つの異なった方法によってサポートされる POSIX デバイス名を利用して、Cygwin アプリケーションからこれらのデバイスにアクセス出来ます。
Cygwin 1.3.3 まで、これらのデバイスにアクセスする唯一の方法は Win32 デバイス名を POSIX デバイス名へとマウントすることでした。 この利用方法は Cygwin 1.3.4 以降は推奨されておらず、後方互換性のためにのみ残されています。
Cygwin 1.3.4 からは、固定の POSIX デバイス名を利用することによって Cygwin のプロセスから raw デバイスへとアクセスすることが可能となりました。 これら固定の POSIX デバイス名は、NT の内部名前空間から POSIX の名前空間への直接変換によって生成されています。 例えば、最初のハードディスクは NT 内部デバイス \device\harddisk0\partition0 であり、三番目のハードディスクにある最初のパーティションは \device\harddisk2\partition1 です。 システムの最初のフロッピーは \device\floppy0、最初の CD-ROM は \device\cdrom0、最初のテープドライブは \device\tape0 です。
新しい固定 POSIX 名は、NT 内部デバイスと以下のように対応付けられています。
/dev/st0 \device\tape0、巻き戻しあり /dev/nst0 \device\tape0、巻き戻しなし /dev/st1 \device\tape1 ... /dev/fd0 \device\floppy0 /dev/fd1 \device\floppy1 ... /dev/scd0 \device\cdrom0 /dev/scd1 \device\cdrom1 ... /dev/sr0 \device\cdrom0 /dev/sr1 \device\cdrom1 ... /dev/sda \device\harddisk0\partition0 (ディスク全体) /dev/sda1 \device\harddisk0\partition1 (最初のパーティション) ... /dev/sda15 \device\harddisk0\partition15 (15 番目のパーティション) /dev/sdb \device\harddisk1\partition0 /dev/sdb1 \device\harddisk1\partition1 [up to] /dev/sdl \device\harddisk11\partition0 /dev/sdl1 \device\harddisk11\partition1 ... /dev/sdl15 \device\harddisk11\partition15
もしこれらのデバイス名が気に入らなければ、使いやすくするために、 Linux システム上で作られているように自由にシンボリックリンクを作成します。
ln -s /dev/scd0 /dev/cdrom ln -s /dev/nst0 /dev/tape ...
内部 NT デバイス名や固定デバイス名を自分用のデバイス名へと対応付ける際、マウントテーブルを利用しないように注意して下さい。 同様に、内部 NT デバイス名から自分用のデバイス名へのシンボリックリンクを作成しても、それは望むような動作はしません。 以下に挙げた二つの例は、期待通りには動作しないでしょう。
mount -f -b /dev/nst0 /dev/tape # 動作しません mount -f -b /device/tape0 /dev/tape # 動作しません ln -s /device/tape0 /dev/tape # 動作しません
実行可能プログラムファイル名は .exe
で終わりますが、.exe がコマンド名中に含まれている必要はありません。
すなわち、伝統的な UNIX コマンド名が使用できます。
しかし、.bat及び .com
で終わるプログラムについては、拡張子を省略することはできません。
副作用として、filename.exe は存在するが filename
は存在しないという場合でも、 ls filename は
filename.exe に関する情報を出力します。
同様の現象として、stat("filename",..) 関数呼び出しは
filename.exe に関する情報を返します。
このような二つのファイルは、以下に示すように i ノードを調べれば区別出来ます。
C:\>ls * a a.exe b.exeC:\>ls -i a a.exe 445885548 a 435996602 a.exeC:\>ls -i a a.exe 432961010 b 432961010 b.exe
シェルスクリプト myprog とプログラム
myprog.exe があるディレクトリ中に共存していた場合、myprog
の実行に際してはプログラムが優先して選択されます。
gcc コンパイラは
filename を生成するように指示された場合、filename.exe
という名前で実行ファイルを生成します。これによって、UNIX システム用に書かれた多くの Makefile は
Cygwin 上でも同様に動作します。
不幸なことに、install 及び strip コマンドは
filename と filename.exe
を区別することが出来ません。この二つのプログラムは
filename.exe が存在して
filename が存在しない場合は失敗してしまうため、一部の
Makefile による make は中断してしまうことになるでしょう。
この問題は、必要に応じて「.exe」の存在を想定する
install 及び strip
の二つのシェルスクリプトを作成することによって解決出来ます。
Linux や他の同種のオペレーティングシステムと同様、Cygwin は
/proc 仮想ファイルシステムをサポートしています。
このディレクトリ中にあるファイルはシステムの様々な側面を表現しており、例えばコマンド
cat /proc/cpuinfo を実行すれば、
利用しているプロセッサのモデルやスピードなどの情報が表示されます。
Cygwin の /proc
ファイルシステムが備える独自の概念の一つとして、/proc/registry の存在が挙げられます。
/proc/registry はKEY をディレクトリ、そして VALUE
をファイルとして、Windows のレジストリを表現しています。
Windows のレジストリを操作する時は常に、レジストリの変更によってシステムが不安定になる、或いは壊れてしまうことがあり得るという点に注意して下さい。
Cygwin の /proc は Linux の /proc
ほど完全なものではありませんが、重要な能力を備えています。
procps パッケージには /proc
を利用する様々なユーティリティが含まれています。
ネイティブの Windows コマンドシェルにおける一行の長さの制限を回避するため、Cygwin
プログラムは「@」で始まる引数を特別な方法で展開します。もし
パス名 が存在するならば、@パス名 は再帰的に
パス名 の内容に展開されます。
ダブルクォートはファイル中において空白を含んだ文字列のデリミタとして使用することが出来ます。
埋め込まれたダブルクォートは置換されなければなりません。以下の例では bash 組み込みの
echo と /bin/echo
の動作の違いを比較しています。