On 09/16/2010 09:42 AM, Sameer Naik wrote:
> Thanks i will try it out.
>
> On Thu, Sep 16, 2010 at 9:59 PM, JD<[email protected]> wrote:
>>
>> On 09/16/2010 03:00 AM, Sameer Naik wrote:
>>> Please find attached.
>>> P.S. I have added the fflush () call before the fsync () call.
>>>
>>> Regards
>>> ~Sameer
>> Well, as I already communicated with Pierre, the man page for fsync says:
>>
>> Calling fsync() does not necessarily ensure that the entry in the
>> directory containing the file has also reached disk. For that, an
>> explicit fsync() on a file descriptor for the directory is also
>> needed.
>>
>> So, when creating a new file, it is not sufficient to flush and fsync the
>> file descriptor.
>> You also need to have opened the containing directory and fsync'ed the
>> directory
>> file descriptor immediately after creating the file. flushing and sync'ing
>> the file
>> comes later when you are done with writing to it.
>>
>> Cheers,
>>
>> JD
>>
Remember that a directory can only be opened by
DIR *opendir(const char *name);
DIR *fdopendir(int fd);
Problem is, how can you fsync a dir if you cannot open it
with the open(2) system call?
fsync(2) needs a file descriptor.
DIR * is not a file descriptor.
And yet, the man page for fsync says:
Calling fsync() does not necessarily ensure that the entry
in the
directory containing the file has also reached disk. For
that an
explicit fsync() on a file descriptor for the directory is also
needed.
Maybe someone can clear this up a bit?
------------------------------------------------------------------------------
Start uncovering the many advantages of virtual appliances
and start using them to simplify application deployment and
accelerate your shift to cloud computing.
http://p.sf.net/sfu/novell-sfdev2dev
_______________________________________________
ntfs-3g-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ntfs-3g-devel