Big empty file creation

I need to creat an empty file, over 10GB size.
Which way is fastest in file creation?

···

------
file<<"0"*file_size_in_bytes
-------
consme too much memory

-------
for i in 1...x
  file<"0"file_size/x
end
-------
too slow :frowning:

But note that this will not work on all OS in case the file must be allocated. Seeking likely creates a sparse file.

Another approach is to use dd like

dd if=/dev/zero of=your_file bs=1048576 count=10240

That's probably as fast as it gets if you need blocks actually allocated to the file.

Kind regards

  robert

···

On 28.06.2008 11:10, ts wrote:

Zhukov Pavel wrote:

I need to creat an empty file, over 10GB size.
Which way is fastest in file creation?

use IO#sysseek followed which a IO#seekwrite

Pick a value of x that's a multiple of 512 bytes as this will match your data writes to the OS's disk cache. This may or may not gain you some performance advantage which will vary depending on the underlying cluster size of the file system, general filesystem overhead, disk fragmentation and a host of other properties that our outside your control as a programmer. Even coding is assembler creating a 10GB file with each byte zeroed is going to be a slow process...

Ellie

Eleanor McHugh
Games With Brains
http://slides.games-with-brains.net

···

On 28 Jun 2008, at 09:57, Zhukov Pavel wrote:

I need to creat an empty file, over 10GB size.
Which way is fastest in file creation?

------
file<<"0"*file_size_in_bytes
-------
consme too much memory

-------
for i in 1...x
file<"0"file_size/x
end
-------
too slow :frowning:

----
raise ArgumentError unless @reality.responds_to? :reason

i can't use dd, cause i want a cross-platform application

···

On Sat, Jun 28, 2008 at 1:22 PM, Robert Klemme <shortcutter@googlemail.com> wrote:

On 28.06.2008 11:10, ts wrote:

Zhukov Pavel wrote:

I need to creat an empty file, over 10GB size.
Which way is fastest in file creation?

use IO#sysseek followed which a IO#seekwrite

But note that this will not work on all OS in case the file must be
allocated. Seeking likely creates a sparse file.

Another approach is to use dd like

dd if=/dev/zero of=your_file bs=1048576 count=10240

That's probably as fast as it gets if you need blocks actually allocated to
the file.

Kind regards

       robert

dd runs on my Linux, cygwin, Solaris, HP UX... - pretty cross platform I'd say. :slight_smile:

The question is - do you need the whole file to be allocated or not? If yes, a solution is slow regardless of programming language.

Cheers

  robert

···

On 28.06.2008 12:23, Zhukov Pavel wrote:

On Sat, Jun 28, 2008 at 1:22 PM, Robert Klemme > <shortcutter@googlemail.com> wrote:

On 28.06.2008 11:10, ts wrote:

Zhukov Pavel wrote:

I need to creat an empty file, over 10GB size.
Which way is fastest in file creation?

use IO#sysseek followed which a IO#seekwrite

But note that this will not work on all OS in case the file must be
allocated. Seeking likely creates a sparse file.

Another approach is to use dd like

dd if=/dev/zero of=your_file bs=1048576 count=10240

That's probably as fast as it gets if you need blocks actually allocated to
the file.

i can't use dd, cause i want a cross-platform application