このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1307166756/374
#  [1]授業単元:オペレーティングシステム論 
#  [2]課題:適当な名前の大きさ100Mバイトのバイナリファイルを作成し、内容を乱数バイト配列とする。 
#  それをクローズし、そのファイルを開き、すべてのビットを反転させた内容に置換する。 
#  これを10万回繰り返すプログラムを作成し、HD、SSD、USBフラッシュメモリ等のデバイスの差 
#  処理時間がどのくらい変わるかテストするプログラムを作成せよ 
#  [3] OS:Windows IDE:Visual studio 2008 言語:C 
#  [4] 6/15まで 
#  [5] ディスクキャッシュが大きいとディスクに短期間では確実に書き込まれるとは限らないので、ファイルを100個作って1000回 
#  繰り返すプログラムにしたほうが良い 
#  とのことです。 
#  コードだけでなく、実行時間もお願いします。 
# 
# 

'適当な名前の大きさ100Mバイトのバイナリファイルを作成し、内容を乱数バイト配列とする。それをクローズし、そのファイルを開き、すべてのビットを反転させた内容に置換する' :-
        '適当な名前の大きさ100Mバイトのバイナリファイルを作成し、内容を乱数バイト配列とする'(File,Outstream),
        それをクローズし(Outstream),
        'そのファイルを開き、すべてのビットを反転させた内容に置換する'(File).

'適当な名前の大きさ100Mバイトのバイナリファイルを作成し、内容を乱数バイト配列とする'(File,Outstream) :-
        tmpnam(File),
        open(File,write,Outstream,[type(binary)]),
        for(1,N,100000000),
        Code is random(256),
        put_byte(Outstream,Code),
        N = 100000000,!.

それをクローズし(Outstream) :-
        close(Outstream).

'そのファイルを開き、すべてのビットを反転させた内容に置換する'(File) :-
        open(File,update,Updatestream,[type(binary)]),
        repeat,
        (    at_end_of_stream(Updatestream);
             get_byte(Updatestream,Byte),
             Byte1 is Byte - 255,
             put_byte(Updatestream,Byte1),
             fail
        ),
        close(Updatestream).