The file associated with the file descriptor has to be opened before hand. The constructor will determine automatically if the file is readable, writable and seekable. Note that on destruction the file descriptor is NOT closed.
// Get a file descriptor for the file. int fd = open ("file.name"); // Use that as the source of AipsIO (which will also use CanonicalIO). FiledesIO fio (fd); AipsIO stream (&fio); // Read the data. Int vali; Bool valb; stream >> vali >> valb;
Construct from the given file descriptor. The file descriptor must have been obtained using the TapeIO::open static function. When constructed this way the class will not take over the file descriptor and hence not close the Tape device when this class is destroyed.
Construct from the given device. The device must point to a tape device and if requested it is checked if the device is writeable. Throws an exception if the device could not be opened correctly. When constructed this way the class will close the Tape device when this class is destroyed or the TapeIO object is attached to a new file descriptor.
The destructor will only close the file if the appropriate constructor, or attach function, was used.
Attach to the given file descriptor. The file descriptor will not be closed when this class is destroyed.
Attach to the given tape device. The tape will be closed when this class is destroyed or the TapeIO object is attached to a new descriptor.
Write the specified number of bytes.
Read size bytes from the tape. Returns the number of bytes actually read or a negative number if an error occured. Will throw an exception (AipsError) if the requested number of bytes could not be read, or an error occured, unless throwException is set to False. Will always throw an exception if the tape is not readable or the system call returns an undocumented value. Returns zero if the tape is at the end of the current file (and size is non-zero and throwException is False).
Rewind the tape device to the beginning.
skip the specified number of files (ie tape marks) on the tape. Throws an exception if you try to skip past the last filemark.
write the specified number of filemarks.
returns True if the tape device is configured to use a fixed block size
returns the block size in bytes. Returns zero if the device is configured to use variable length blocks.
Configure the tape device to use fixed length blocks of the specified size. The size must be bigger than zero (dugh!). Values bigger than 64k may cause problems on some systems. Currently this function only does anything under Solaris and Linux systems.
Configure the tape device to use variable length blocks. Currently this function only does anything under Solaris and Linux systems.
Get the length of the tape device. Not a meaningful function for this class and this function always returns -1.
Is the tape device readable?
Is the tape device writable?
Is the tape device seekable?
Get the name of the attached device or return a zero length string if it cannot be determined.
Some static convenience functions for file descriptor opening & closing. The open function returns a file descriptor and the close function requires a file descriptor as an argument.
Determine if the file is readable and/or writable.
Determine if the file is seekable.
Reset the position pointer to the given value. It returns the new position. May not work on all Tape devices use the isSeekable(0 member function to see if this function is usuable. Otherwise an Exception (AipsError) is thrown.