示例#1
0
    def read(self, buflen=-1):
        """
        read file

        :param buflen: length of read buffer. If less than 0, then whole
                       file is read. Default is -1.
        :returns: buffer of size buflen
        """
        if buflen < 0:
            buflen = self.fgetsize()
        rbuf = ctypes.create_string_buffer(buflen)
        ret = api.glfs_read(self.fd, rbuf, buflen, 0)
        if ret > 0:
            return rbuf
        elif ret < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
        else:
            return ret
示例#2
0
    def read(self, buflen=-1):
        """
        read file

        :param buflen: length of read buffer. If less than 0, then whole
                       file is read. Default is -1.
        :returns: buffer of size buflen
        """
        if buflen < 0:
            buflen = self.fgetsize()
        rbuf = ctypes.create_string_buffer(buflen)
        ret = api.glfs_read(self.fd, rbuf, buflen, 0)
        if ret > 0:
            return rbuf
        elif ret < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
        else:
            return ret
示例#3
0
    def read(self, size=-1):
        """
        Read at most size bytes from the file.

        :param buflen: length of read buffer. If less than 0, then whole
                       file is read. Default is -1.
        :returns: buffer of 'size' length
        """
        if size < 0:
            size = self.fgetsize()
        rbuf = ctypes.create_string_buffer(size)
        ret = api.glfs_read(self.fd, rbuf, size, 0)
        if ret > 0:
            # In python 2.x, read() always returns a string. It's really upto
            # the consumer to decode this string into whatever encoding it was
            # written with.
            return rbuf.value[:ret]
        elif ret < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
示例#4
0
    def read(self, size=-1):
        """
        Read at most size bytes from the file.

        :param buflen: length of read buffer. If less than 0, then whole
                       file is read. Default is -1.
        :returns: buffer of 'size' length
        """
        if size < 0:
            size = self.fgetsize()
        rbuf = ctypes.create_string_buffer(size)
        ret = api.glfs_read(self.fd, rbuf, size, 0)
        if ret > 0:
            # In python 2.x, read() always returns a string. It's really upto
            # the consumer to decode this string into whatever encoding it was
            # written with.
            return rbuf.value[:ret]
        elif ret < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
示例#5
0
    def readinto(self, buf):
        """
        Read up to len(buf) bytes into buf which must be a bytearray.
        (buf cannot be a string as strings are immutable in python)

        This method is useful when you have to read a large file over
        multiple read calls. While read() allocates a buffer every time
        it's invoked, readinto() copies data to an already allocated
        buffer passed to it.

        :returns: the number of bytes read (0 for EOF).
        :raises: OSError on failure
        """
        if type(buf) is bytearray:
            buf_ptr = (ctypes.c_ubyte * len(buf)).from_buffer(buf)
        else:
            # TODO: Allow reading other types such as array.array
            raise TypeError("buffer must of type bytearray")
        nread = api.glfs_read(self.fd, buf_ptr, len(buf_ptr), 0)
        if nread < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
        return nread
示例#6
0
    def readinto(self, buf):
        """
        Read up to len(buf) bytes into buf which must be a bytearray.
        (buf cannot be a string as strings are immutable in python)

        This method is useful when you have to read a large file over
        multiple read calls. While read() allocates a buffer every time
        it's invoked, readinto() copies data to an already allocated
        buffer passed to it.

        :returns: the number of bytes read (0 for EOF).
        :raises: OSError on failure
        """
        if type(buf) is bytearray:
            buf_ptr = (ctypes.c_ubyte * len(buf)).from_buffer(buf)
        else:
            # TODO: Allow reading other types such as array.array
            raise TypeError("buffer must of type bytearray")
        nread = api.glfs_read(self.fd, buf_ptr, len(buf_ptr), 0)
        if nread < 0:
            err = ctypes.get_errno()
            raise OSError(err, os.strerror(err))
        return nread