<p dir="ltr">If Jeff is correct, you might get around the issue by doing the writes to a tmpfs RAM disk, rather than to a physical disk.</p>
<div class="gmail_quote">On Jan 10, 2016 10:32 AM, &quot;Jeff Frontz&quot; &lt;<a href="mailto:jeff.frontz@gmail.com">jeff.frontz@gmail.com</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jan 9, 2016 at 11:13 PM, William E. T. <span dir="ltr">&lt;<a href="mailto:linux.hacker@gmail.com" target="_blank">linux.hacker@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div>1.   Opens a new file</div><div>2.  Writes to the file</div><div>3.  Closes the file</div><div>4.  Creates a link to its real name</div><div>5.  Removes the original file</div><div>6.  stats the file to find a zero size</div></blockquote></div><br>Without knowing the details of the particular kernel or filesystem/RAID drivers involved, there  is the potential for a race condition between 2/3 and 6.</div><div class="gmail_extra"><br></div><div class="gmail_extra">On Unix/Linux, there is no guarantee that data has ever made it to the &quot;disk&quot; (which could include the various levels of drivers/caches in between your program and the actual hardware).</div><div class="gmail_extra"><br></div><div class="gmail_extra">From the close(2) man page notes:</div><div class="gmail_extra"><br></div>&quot; A  successful  close  does  not  guarantee that the data has been successfully saved to disk, as the kernel defers writes. It is not common for a filesystem to flush the buffers when the stream is closed. If you need to be sure that the data is physically stored use fsync(2).  (It will depend on the disk hardware at this point.)&quot;<p style="margin:0px;font-size:10px;line-height:normal;font-family:Monaco"><br></p><div class="gmail_extra"><br></div><div class="gmail_extra">The only guarantee of a non-zero size would be if you called fstat (note the &quot;f&quot;) on the still-open file descriptor (used in 1/2/3 above).</div><div class="gmail_extra"><br></div><div class="gmail_extra">You can throw in a call to sync(2) to after the close(), though depending on how your I/O stack is composed even that might not be perfect.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Jeff</div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div></div>
<br>_______________________________________________<br>
colug-432 mailing list<br>
<a href="mailto:colug-432@colug.net">colug-432@colug.net</a><br>
<a href="http://lists.colug.net/mailman/listinfo/colug-432" rel="noreferrer" target="_blank">http://lists.colug.net/mailman/listinfo/colug-432</a><br>
<br></blockquote></div>