Hi!<div><br></div><div>What you're attempting to do is to allocate a 1GB binary and write it in a single system call, it _should_ work but it's not a reasonably small amount of data to send around like that. Split it up into a sequence of smaller writes of ... say 4KB at the time. It's also possible to allocate a sparse file of a given size by seeking forward N bytes and writing a single byte.</div>
<div><br></div><div>For the first option something along these lines should work, i'd make sure to verify that any edge cases aren't too broken.</div><div><br></div><div> {ok, FD} = file:open(FName,[write,raw,binary]),                                 </div>
<div>Bytes = 1000000000,                                                             </div><div>BSize = 4096,                                                                   </div><div>BData = binary:copy(<<0>>, BSize),                                              </div>
<div>[ok = file:write(FD, BData) || _ <- lists:seq(1, Bytes div BSize)],             </div><div>BRemSize = Bytes rem BSize,                                                     </div><div>BRemData = binary:copy(<<0>>, BRemSize),                                        </div>
<div>ok = file:write(FD, BRemData),                                                  </div><div>file:close(FD) </div><div><br></div><div>For the second options the operating system will lazily allocate blocks on disk to back any data that you write to the file. This should work. Again verify the edge conditions.</div>
<div><br></div><div> {ok, FD} = file:open(FName,[write,raw,binary]),</div><div>{ok, _} = file:position(FD, {bof, Bytes}),</div><div>ok = file:write(FD, <<0>>).</div><div><br></div><div>MVH Magnus</div><div><br>
</div><div><br></div><div><div class="gmail_quote">On Thu, Nov 24, 2011 at 2:20 PM, Amir Almasi <span dir="ltr"><<a href="mailto:amir.fireflame@gmail.com">amir.fireflame@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
<div>Hi All,</div><div>
<br></div><div>I am trying to make a file in Erlang with 1-GB size.</div><div>
This is a command:</div><div><br></div><div>
<div><font color="#222222" face="arial, sans-serif">{ok,Io} = file:open(FName,[write,raw,binary]),</font></div><div><font color="#222222" face="arial, sans-serif">             BitSize= 1000000000 * 8 ,</font></div>
<div><font color="#222222" face="arial, sans-serif">             Reply = file:write (Io,<< 0 : BitSize >> ),</font></div><div><font color="#222222" face="arial, sans-serif">             file:close(Io),</font></div>

<div><font color="#222222" face="arial, sans-serif"><br></font></div><div><font color="#222222" face="arial, sans-serif">And the problem would be: </font></div></div><div>
=ERROR REPORT==== 24-Nov-2011::13:53:24 ===</div><div>Error in process <0.37.0> with exit value: {system_limit,[{erbitFile,loop,1},{erbitFile,init,0}]}</div>
<div><br></div><div>
I should mention that the operating system is windows!</div><div><br></div><div>
Please help me out with this matter,</div><div><br></div><div>
Regards,</div><div><br></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>