Re: buffer flushing

new topic     » goto parent     » topic index » view thread      » older message » newer message

I think you only want to flush/close files if they are writable.
That means you want to move your close() statement in flush()
below your if "read only" statement.
I also suggest you alter your r to be a find 'r'
"rb" is possible.
even then if you don't close a readable file you will
want to use seek() to return to the beginning of the file.

-- Lucius L. Hilley III

On Thu, 13 May 1999 14:42:16 +0100, Carl R. White
<C.R.White at SCM.BRAD.AC.UK> wrote:

>On Tue, 11 May 1999, Robert Craig wrote:
>
>] Brian Jackson writes:
>] > Does anyone know of a way to flush a file buffer
>] > on an open file (other than closing and then re-opening it?)
>]
>] Closing the file is currently the only way.
>] In the next major release I'll add a flush() routine.
>]
>] Regards,
>]      Rob Craig
>
>Here's an on-the-fly solution that uses the "close-reopen" trick. It's
>coded so that it can be put straight into an .E library.
>
>-- Initialise the trick:
>sequence open_log
>open_log = repeat(0,25) -- Or whatever Eu's MAX_FILES_LIMIT is...
>
>-- redefine the open and close subroutines to use open_log:
>function old_open(sequence name, sequence mode)
>    return open(name, mode)
>end function
>
>procedure old_close(integer handle)
>    close(handle)
>end procedure
>
>without warning -- me about redefinitions
>    global function open(sequence name, sequence mode)
>        integer handle
>        handle = old_open(name, mode)
>        if handle = -1 then return -1 end if
>
>        open_log[handle] = {name, mode}
>
>        return handle
>    end function
>
>    global procedure close(integer handle)
>        if handle < 3 or handle > 25 or atom(open_log[handle]) then
>            return
>        end if
>        open_log[handle] = 0
>        old_close(handle)
>    end procedure
>with warning -- of other stuff :)
>
>-- and now the new flush procedure:
>global procedure flush(integer handle)
>    object info
>    if handle < 3 or handle > 25 then return end if
>    info = open_log[handle]
>    if atom(info) then return end if
>    old_close(handle) -- use old close for speed, checks already done...
>    if info[2][1] = 'r' then return end if -- only flush writeable files
>    old_open(info[1], info[2]) -- using the new open isn't necessary.
>end procedure
>
>HTH,
>Carl
>
>--
>Carl R White -- cyrek- at -bigfoot.com -- http://www.bigfoot.com/~cyrek
> aka Cyrek   --    No hyphens :)    --       Bigfoot URL Alias

new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu