123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- /* mbed Microcontroller Library
- * Copyright (c) 2006-2013 ARM Limited
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef MBED_FILEHANDLE_H
- #define MBED_FILEHANDLE_H
-
- typedef int FILEHANDLE;
-
- #include <stdio.h>
-
- #if defined(__ARMCC_VERSION) || defined(__ICCARM__)
- typedef int ssize_t;
- typedef long off_t;
-
- #else
- # include <sys/types.h>
- #endif
-
- namespace mbed {
-
- /** An OO equivalent of the internal FILEHANDLE variable
- * and associated _sys_* functions.
- *
- * FileHandle is an abstract class, needing at least sys_write and
- * sys_read to be implmented for a simple interactive device.
- *
- * No one ever directly tals to/instanciates a FileHandle - it gets
- * created by FileSystem, and wrapped up by stdio.
- */
- class FileHandle {
-
- public:
- /** Write the contents of a buffer to the file
- *
- * @param buffer the buffer to write from
- * @param length the number of characters to write
- *
- * @returns
- * The number of characters written (possibly 0) on success, -1 on error.
- */
- virtual ssize_t write(const void* buffer, size_t length) = 0;
-
- /** Close the file
- *
- * @returns
- * Zero on success, -1 on error.
- */
- virtual int close() = 0;
-
- /** Function read
- * Reads the contents of the file into a buffer
- *
- * @param buffer the buffer to read in to
- * @param length the number of characters to read
- *
- * @returns
- * The number of characters read (zero at end of file) on success, -1 on error.
- */
- virtual ssize_t read(void* buffer, size_t length) = 0;
-
- /** Check if the handle is for a interactive terminal device.
- * If so, line buffered behaviour is used by default
- *
- * @returns
- * 1 if it is a terminal,
- * 0 otherwise
- */
- virtual int isatty() = 0;
-
- /** Move the file position to a given offset from a given location.
- *
- * @param offset The offset from whence to move to
- * @param whence SEEK_SET for the start of the file, SEEK_CUR for the
- * current file position, or SEEK_END for the end of the file.
- *
- * @returns
- * new file position on success,
- * -1 on failure or unsupported
- */
- virtual off_t lseek(off_t offset, int whence) = 0;
-
- /** Flush any buffers associated with the FileHandle, ensuring it
- * is up to date on disk
- *
- * @returns
- * 0 on success or un-needed,
- * -1 on error
- */
- virtual int fsync() = 0;
-
- virtual off_t flen() {
- /* remember our current position */
- off_t pos = lseek(0, SEEK_CUR);
- if(pos == -1) return -1;
- /* seek to the end to get the file length */
- off_t res = lseek(0, SEEK_END);
- /* return to our old position */
- lseek(pos, SEEK_SET);
- return res;
- }
-
- virtual ~FileHandle();
- };
-
- } // namespace mbed
-
- #endif
|