1ef9e4f7b23f110093bce85b92d8522d496676098Logan/* 2ef9e4f7b23f110093bce85b92d8522d496676098Logan * Copyright 2010, The Android Open Source Project 3ef9e4f7b23f110093bce85b92d8522d496676098Logan * 4ef9e4f7b23f110093bce85b92d8522d496676098Logan * Licensed under the Apache License, Version 2.0 (the "License"); 5ef9e4f7b23f110093bce85b92d8522d496676098Logan * you may not use this file except in compliance with the License. 6ef9e4f7b23f110093bce85b92d8522d496676098Logan * You may obtain a copy of the License at 7ef9e4f7b23f110093bce85b92d8522d496676098Logan * 8ef9e4f7b23f110093bce85b92d8522d496676098Logan * http://www.apache.org/licenses/LICENSE-2.0 9ef9e4f7b23f110093bce85b92d8522d496676098Logan * 10ef9e4f7b23f110093bce85b92d8522d496676098Logan * Unless required by applicable law or agreed to in writing, software 11ef9e4f7b23f110093bce85b92d8522d496676098Logan * distributed under the License is distributed on an "AS IS" BASIS, 12ef9e4f7b23f110093bce85b92d8522d496676098Logan * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ef9e4f7b23f110093bce85b92d8522d496676098Logan * See the License for the specific language governing permissions and 14ef9e4f7b23f110093bce85b92d8522d496676098Logan * limitations under the License. 15ef9e4f7b23f110093bce85b92d8522d496676098Logan */ 16ef9e4f7b23f110093bce85b92d8522d496676098Logan 17ef9e4f7b23f110093bce85b92d8522d496676098Logan#ifndef BCC_FILEHANDLE_H 18ef9e4f7b23f110093bce85b92d8522d496676098Logan#define BCC_FILEHANDLE_H 19ef9e4f7b23f110093bce85b92d8522d496676098Logan 20ef9e4f7b23f110093bce85b92d8522d496676098Logan#include <sys/types.h> 21ef9e4f7b23f110093bce85b92d8522d496676098Logan 22ef9e4f7b23f110093bce85b92d8522d496676098Logan#include <stddef.h> 23ef9e4f7b23f110093bce85b92d8522d496676098Logan#include <stdint.h> 24ef9e4f7b23f110093bce85b92d8522d496676098Logan 25ef9e4f7b23f110093bce85b92d8522d496676098Logannamespace bcc { 26ef9e4f7b23f110093bce85b92d8522d496676098Logan namespace OpenMode { 27ef9e4f7b23f110093bce85b92d8522d496676098Logan enum ModeType { 2877124dfc0db4005d37dbd9d7e5e114dda4e3e430Logan Read = 0, 2977124dfc0db4005d37dbd9d7e5e114dda4e3e430Logan Write = 1, 30ef9e4f7b23f110093bce85b92d8522d496676098Logan }; 31ef9e4f7b23f110093bce85b92d8522d496676098Logan } 32ef9e4f7b23f110093bce85b92d8522d496676098Logan 33ef9e4f7b23f110093bce85b92d8522d496676098Logan class FileHandle { 34ef9e4f7b23f110093bce85b92d8522d496676098Logan private: 35ef9e4f7b23f110093bce85b92d8522d496676098Logan int mFD; 36ef9e4f7b23f110093bce85b92d8522d496676098Logan 37ef9e4f7b23f110093bce85b92d8522d496676098Logan public: 38ef9e4f7b23f110093bce85b92d8522d496676098Logan FileHandle() : mFD(-1) { 39ef9e4f7b23f110093bce85b92d8522d496676098Logan } 40ef9e4f7b23f110093bce85b92d8522d496676098Logan 41ef9e4f7b23f110093bce85b92d8522d496676098Logan ~FileHandle() { 42ef9e4f7b23f110093bce85b92d8522d496676098Logan if (mFD >= 0) { 43ef9e4f7b23f110093bce85b92d8522d496676098Logan close(); 44ef9e4f7b23f110093bce85b92d8522d496676098Logan } 45ef9e4f7b23f110093bce85b92d8522d496676098Logan } 46ef9e4f7b23f110093bce85b92d8522d496676098Logan 47ef9e4f7b23f110093bce85b92d8522d496676098Logan int open(char const *filename, OpenMode::ModeType mode); 48ef9e4f7b23f110093bce85b92d8522d496676098Logan 49ef9e4f7b23f110093bce85b92d8522d496676098Logan void close(); 50ef9e4f7b23f110093bce85b92d8522d496676098Logan 51ef9e4f7b23f110093bce85b92d8522d496676098Logan int getFD() { 52ef9e4f7b23f110093bce85b92d8522d496676098Logan // Note: This function is designed not being qualified by const. 53ef9e4f7b23f110093bce85b92d8522d496676098Logan // Because once the file descriptor is given, the user can do every 54ef9e4f7b23f110093bce85b92d8522d496676098Logan // thing on file descriptor. 55ef9e4f7b23f110093bce85b92d8522d496676098Logan 56ef9e4f7b23f110093bce85b92d8522d496676098Logan return mFD; 57ef9e4f7b23f110093bce85b92d8522d496676098Logan } 58ef9e4f7b23f110093bce85b92d8522d496676098Logan 59ef9e4f7b23f110093bce85b92d8522d496676098Logan off_t seek(off_t offset, int whence); 60ef9e4f7b23f110093bce85b92d8522d496676098Logan 61ef9e4f7b23f110093bce85b92d8522d496676098Logan ssize_t read(char *buf, size_t count); 62ef9e4f7b23f110093bce85b92d8522d496676098Logan 63ef9e4f7b23f110093bce85b92d8522d496676098Logan ssize_t write(char const *buf, size_t count); 64ef9e4f7b23f110093bce85b92d8522d496676098Logan 65ef9e4f7b23f110093bce85b92d8522d496676098Logan void truncate(); 66ef9e4f7b23f110093bce85b92d8522d496676098Logan 67ef9e4f7b23f110093bce85b92d8522d496676098Logan }; 68ef9e4f7b23f110093bce85b92d8522d496676098Logan 69ef9e4f7b23f110093bce85b92d8522d496676098Logan} // namespace bcc 70ef9e4f7b23f110093bce85b92d8522d496676098Logan 71ef9e4f7b23f110093bce85b92d8522d496676098Logan#endif // BCC_FILEHANDLE_H 72