> -----Original Message-----
> From: Merlin Moncure [mailto:[EMAIL PROTECTED]] 
> Sent: Monday, February 03, 2003 3:00 PM
> To: Andrew Dunstan
> Cc: [EMAIL PROTECTED]
> Subject: Re: [HACKERS] Win32 and fsync()
> 
> 
> >I'm having difficulty digging up the reference, but I think I recall
> seeing >something that said, roughly, on W32 there are 2 sets 
> of buffers
> - those in >the user level library and those in the kernel 
> level driver, and >FlushFileBuffers drains the first, while 
> _commit drains both (it includes a >call to FlushFileBuffers).
> 
> You were correct: here is the source.
> 
> 
> int __cdecl _commit (
>         int filedes
>         )
> {
>         int retval;
> 
>         /* if filedes out of range, complain */
>         if ( ((unsigned)filedes >= (unsigned)_nhandle) ||
>              !(_osfile(filedes) & FOPEN) )
>         {
>                 errno = EBADF;
>                 return (-1);
>         }
> 
>         _lock_fh(filedes);
> 
>         /* if filedes open, try to commit, else fall through to bad */
>         if (_osfile(filedes) & FOPEN) {
> 
>                 if ( 
> !FlushFileBuffers((HANDLE)_get_osfhandle(filedes))
> ) {
>                         retval = GetLastError();
>                 } else {
>                         retval = 0;     /* return success */
>                 }
> 
>                 /* map the OS return code to C errno value 
> and return code */
>                 if (retval == 0) {
>                         goto good;
>                 } else {
>                         _doserrno = retval;
>                         goto bad;
>                 }
> 
>         }
> 
> bad :
>         errno = EBADF;
>         retval = -1;
> good :
>         _unlock_fh(filedes);
>         return (retval);
> }

Where is the "other" flush besides FlushFileBuffers()?

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to [EMAIL PROTECTED]

Reply via email to