戻る

プログラミングのための小ネタ

minix

ファイルシステムがエラーなく作れるパーティションの大きさの最大
ver.3 だと4Gでした。
ちなみにver.2 だと1G。
(2008.12.3.)

Cygwin

lsで日本語文字をきちんと表示させたい
.bashrcの中に
「alias ls='ls --show-control-chars'」
を書き加える。
Gaucheを動かすための最小限のCygwin
今までは「UNIXの本質はディスクのこやし。基本はフルインストール!」と叫んで
フルインストールしてきたんだけど、
ちょっと思うところがあって、どれだけあればgaucheが動くか試してみました。
とりあえず……
gcc, make, bashがあれば./configureからmakeそしてmake installまでできました。
実際にはその他にemacs, screenも入れているんだけど
それでも240MB程度です。
……これをUSBメモリーに入れれば結構幸せかも。
  ……USB起動できればもっと幸せかも……。
    ……USB起動のlinuxはよくきくけど、windowsはあるんだろうか。
      ……あるそうです。
        例えば株式会社アーク情報システムの「BOOT革命USB」
32768byteしか書き込めない
Gaucheでlistをwriteしてもdisplayしてもprintしても、最大32768byteしかファイルに書き込めないって現象がおきます。最初はGaucheの制限かと思ったんだけど……。それにしてはlisp使いにあるまじき制限だなと思って調べてみたら……。
cygwinの制限でした〜。
1回のforkで書き込める量がデフォルトで32768byteで、この制限から逃げるためには、例えばwindows2000なら、ユーザー変数で「CYGWIN」に「forkchunk:100000000」なんてして書き込み量を増やす。当然プログラムによっては限界までがんばろうとして、結果、動作が遅くなるなんてこともあるとのことなんだけど、あたし基本的にはGaucheしか使わないから、たぶん大丈夫でしょう。
Gaucheをcygwinで使う時に要注意事項かも……。
……でもschemeのプログラムによってはやはしだめだった……。(泣)
cygwinのCでコンパイルしたプログラムを普通のコマンドプロンプトから動かす
cygwinの基本方針は「windowsとUNIXの違いをcygwin1.dllで吸収し、UNIX上のプログラムをあたかもwindowsのプログラムのように動かす。」なので、
原理的にはcygwin1.dllがあれば動くはず。
ところがたいていは
「cygwin1.dll が見つからなかったため、このアプリケーションを開始できませんでした。」
が出てだめ。
そこで別の手段を考える……。
cygwin1.dllでやっていることを他の方法でやればいいのではないか。
その観点から開発されているのが,MinGWだったりします。
元はcygwinと一緒だったのですが,ある時から枝分かれして,
でも今はcygwinのインストールの時の指定次第で一緒にインストールできます。
……何の気なしにフルインストールしていてよかったなあと思う一瞬。
  もっとも意味がわかれば後からMinGW関連だけ追加でインストールすればいいのだが……。
その上で,コンパイル時に
gcc-3 -mno-cygwin main.c
の要領で-mno-cygwinオプションをつけてコンパイルすると(※2)、
できあがったプログラムは、普通のコマンドプロンプトから動くのでした。
gcc-3において-mno-cygwinオプションで普通のコマンドプロンプトから動くのははどうしてかというと
-mno-cygwinオプションが,cygwin1.dllそのほかcygwin特有のファイル等を使わず,
MinGWを構成するファイル群(windowsというOSに付いてくるファイルと互換性のあるもの)
もしくはwindows標準装備のC++ランタイムなどを使ってコンパイルするので,
普通のコマンドプロンプトから動くという仕掛け。
ゆえにMinGWにないファイルをincludeしようとしたりすると
-mno-cygwinオプションなしなら問題ないけど,このオプションをつけるとコンパイルできないなどという
謎現象が起こることになるのです。
この場合はMinGWがきちんとインストールされているか,チェックする必要があります。
ちなみにcygwinを全く入れずにMinGWとMSYSだけでコンパイルするやり方もあります。

ちなみに……このオプションでコンパイルするとcygwinのbashでも普通に動きます。
なもんで,これを知ってからは全部このオプション付でコンパイル。
そうすると,bash(というかbashを動かしているコマンドプロンプト)が日本語入力苦手だって
その部分だけ日本語を苦にしていない通常のコマンドプロンプトで処理させるので
実に快適。
※1参考
DOS 上で動作するプログラムを作る
※2
2010年4月25日現在ですが,gccにはgcc-3と古いバージョンを明示しないといけないようです。
gccはgcc-4を指しますが,それだと,
「The -mno-cygwin flag has been removed; use a mingw-targeted cross-compiler」
というエラーを出してきます。
gccの最新版では対応していない模様。
(2010.4.25.)

Emacs

cygwinのコマンドラインからEmacsを動かす
 たぶんcygwin直下にあるcygwin.batでbashを動かす前の個所に
SET CYGWIN=tty
を書いておかないと,C-x cがきかなくて終われない。
ただしこれやると今度はコマンドラインから動かしたwindowsのプログラムで,文字が入力できなくて困るやつが出てくる模様。
「その時には別のDOS窓で動かすからいいや。」と割りきっている私には問題なし。
……と思ったら自作プログラムで別のDOS窓で動かないのが出てきた。
  な〜ぜ〜。
あわててこれ消しました。
Life with Cygwin 10 参照
(2009.1.14.)

Borland C ++

 ちなみに……無料版があるというのに万札出してC suitesを買ったのも,それに飽き足らずにやはり万札出してC ++ Builder買ったのも私です。で,全然使いこなせてないのでこうなる……。
Error: Unresolved external '_main' referenced from E:\BC5\LIB\C0X32.OBJ
 C suitesに入っている統合環境をインストールして,書籍のサンプルプログラムを入力し,そのファイルをダブルクリックするとやはり統合環境が起動して,統合環境の中でコンパイルできるようになるんだけど,いざコンパイルしてもこんなエラーが出て止まってしまう……な〜ぜ〜。
 これ調べてみると,windowsベースのプログラムではなく,(この環境でクロスコンパイルも不可能ではないんでしょうけど,)まあ通常MS-DOSかwindowsでもいわゆるDOS窓から動かすんでしょうといわんばかりにコンソールベースのプログラムを作ろうとするところ,コンソールベースのプログラムは「main()」があるはずなのに,ないよと言ってエラーを出す。……minixはmainじゃなくstartらしいんでmain絶対ではないらしいけど。そういう話らしいです。
 ゆえに対策は「これはwindowsのプログラムだよ」と教えればいいことになり,コンソールでコマンドラインでコンパイルする時にはそれなりの(-Wだったかな)オプションを指定するといいんだけど,Borland C suitesの統合環境の場合どうするか?
 スマートなやり方はわからないけど,ファイルのダブルクリックで統合環境を起動させちゃうと,少なくともメニューバーからは探せなかった。ゆえに統合環境でファイル→新規作成→プロジェクトを選びコンパイルしたいプログラムソースの入ったファイルの拡張子から前の部分の名前を持つプロジェクトを作ってやり,.defと.rcをプロジェクトから削った後,.cか.cppファイルを選択すればエディタが動くし,メイクだとかコンパイルだとか再構築を押すと無事動くという次第。
ランタイムライブラリ不要の exe ファイルを作成する
C++Builder 1.0 ではデフォルトでランタイムライブラリ不要の exe ファイルを作成していたが、C++Builder 5.0 ではデフォルトでランタイムライブラリが必要な exe ファイルを作成する。C++Builder 5.0 でランタイムライブラリ不要の exe ファイルを作成する方法は以下の通り。
「プロジェクト」→「オプション」のウィンドウにおいて
* 「パッケージ」で「実行時パッケージを使って構築」のチェックを外す
* 「リンカ」で「共有 RTL DLL を使う」のチェックを外す
Borland C++Builder の覚え書き 参照
(2009.2.2.)

JAVA

cygwinのコマンドラインからJAVAを動かす
元ネタは白湯の雑記から
まずjavaのインストールは普通でいい。
(何が普通かは他のサイトを見るべし。)
当たり前だろうけどcygwinだってインストールしてあるはずだし,なかったらインストールする。
そうするとホームのディレクトリに.bash_profileができているから,JAVAのPATHを通すだけ。
例えば末尾に
PATH="/cygdrive/c/Program Files/Java/jdk1.5.0_13/bin:${PATH}"
などと書き加えるとか。
cygwinを再起動させるならbashの環境変数を直ちに変更してくれるコマンドを打つなりで環境に反映させたらそれで終わり。
確認したければ
type -a java
と打って
java is /cygdrive/c/Program Files/Java/jdk1.5.0_13/bin/java
java is /cygdrive/c/WINDOWS/system32/java
と表示されていれば問題なし。
(2008.9.3.)

アセンブラ

コマンドプロンプトからのdebugコマンドの利用
16bit コマンドプロンプト→debug
a 番地
 番地をスタートとして入力を受け付ける
 空改行で終了
g 番地1 番地2
 番地1から番地2まで実行
q
 debug終了
u 番地1 番地2
 番地1から番地2まで逆アセンブル
windows2000系のコマンドプロンプトは32bitモードなので 16bitモードにするためには1回debugコマンドを実行し終了させておく。 そうするとコマンドプロンプトが終わるまで16bitモード
慣例
AX DX データ
BX アドレス
CX カウンタ
(2009.2.2.)
戻る