pro get_pipe_filesize, unit, nbytes, buffer = buffer
;+
; NAME:
; GET_PIPE_FILESIZE
;
; PURPOSE:
; Determine the number of bytes in a unit opened as a pipe with SPAWN
;
; EXPLANATION:
; Reads into a buffer until the end of file is reached and then counts the
; number of bytes read. Needed because the fstat.size field is not
; automatically set for a unit opened as a pipe.
;
; CALLING SEQUENCE:
; GET_PIPE_FILESIZE,unit, nbytes_in_file, BUFFER =
;
; INPUTS:
; unit - IDL unit number of a previously opened file. For example,
; an FPACK ( http://heasarc.gsfc.nasa.gov/fitsio/fpack/ ) compressed
; FITS file could be opened as follows:
;
; IDL> spawn,'funpack -S test.fits.fz', unit=unit
; OUTPUTS:
; nbytes_in_file - Unsigned long64 integer giving number of bytes in
; the file.
;
; INPUT KEYWORD PARAMETERS:
; BUFFER Integer giving number of bytes in the buffer. Default =
; . 1000000
; NOTES:
; Unite must be opened prior to calling GET_PIPE_FILESIZE, and the number
; of bytes is counted from the current pointer position. The pointer is
; left at the end of the file upon return.
; PROCEDURES USED:
; SETDEFAULTVALUE
; REVISION HISTORY:
; Written, W. Landsman Adnet Dec 2010
On_error,2
compile_opt idl2
nbytes = 0ULL
setdefaultvalue, buffer, 1000000
ON_IOerror,Done
b= bytarr(buffer,/noz)
while 1 do begin
readu,unit,b
nbytes += buffer
endwhile
Done:
On_IOError, null
nbytes += (fstat(unit)).transfer_count
return
end