Инструмент dd(1)
может сделать файл достаточно большим, используя очень мало места на диске:
$ dd if=/dev/zero of=huge bs=1024 count=1 seek=100000
1+0 records in
1+0 records out
1024 bytes (1.0 kB) copied, 4.9857e-05 s, 20.5 MB/s
$ ls -lh huge
-rw-r--r-- 1 user user 98M 2011-07-03 02:43 huge
$ du -h huge
12K huge
Файл huge
имеет длину 102400000 байт. (Примерно 98M.) Но это занимает всего 12 килобайт на диске, потому что параметр seek
для dd(1)
заставляет его начать запись "в" файл. Если считываются более ранние байты, ОС будет выдавать бесконечный поток нулей. (Нули 0x00, а не нули ASCII: «0».)
Если бы вы хотели повторить это в Ruby, вы бы использовали функцию File#seek
:
irb> f=File.new("huge", "w")
=> #<File:huge>
irb> f.seek(100000 * 1024)
=> 0
irb> f.write("hello")
=> 5
irb> f.close()
=> nil
irb> ^D
$ ls -lh huge
-rw-r--r-- 1 sarnold sarnold 98M 2011-07-03 02:47 huge
Просто рубиновый код:
f=File.new("100MB", "w")
f.seek(100000 * 1024)
f.write("hello")
f.close()