⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpl_vsil_unix_stdio_64.cpp

📁 用于读取TAB、MIF、SHP文件的类
💻 CPP
字号:
/********************************************************************** * $Id: cpl_vsil_unix_stdio_64.cpp,v 1.11 2006/03/27 15:24:41 fwarmerdam Exp $ * * Project:  CPL - Common Portability Library * Purpose:  Implement VSI large file api for Unix platforms with fseek64() *           and ftell64() such as IRIX.  * Author:   Frank Warmerdam, warmerdam@pobox.com * ********************************************************************** * Copyright (c) 2001, Frank Warmerdam * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: *  * The above copyright notice and this permission notice shall be included * in all copies or substantial portions of the Software. *  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER  * DEALINGS IN THE SOFTWARE. ********************************************************************** * * $Log: cpl_vsil_unix_stdio_64.cpp,v $ * Revision 1.11  2006/03/27 15:24:41  fwarmerdam * buffer in FWrite is const * * Revision 1.10  2006/02/19 21:54:34  mloskot * [WINCE] Changes related to Windows CE port of CPL. Most changes are #ifdef wrappers. * * Revision 1.9  2006/01/10 17:03:56  fwarmerdam * added VSI Rename support * * Revision 1.8  2005/09/11 18:01:28  fwarmerdam * preliminary implementatin of fully virtualized large file api * * Revision 1.7  2005/04/12 00:27:39  fwarmerdam * added macos large file support * * Revision 1.6  2002/06/17 14:00:16  warmerda * segregate VSIStatL() and VSIStatBufL. * * Revision 1.5  2002/06/15 00:07:23  aubin * mods to enable 64bit file i/o * * Revision 1.4  2001/12/15 17:12:08  warmerda * pass 64bit seek/tell functions via VSI_F{SEEK,TELL}64 macros * * Revision 1.3  2001/07/18 04:00:49  warmerda * added CPL_CVSID * * Revision 1.2  2001/06/21 21:39:32  warmerda * Fixed typo with rewind. * * Revision 1.1  2001/06/21 21:17:15  warmerda * New * */#include "cpl_port.h"#if !defined(WIN32) && !defined(WIN32CE)#include "cpl_vsi_private.h"#include "cpl_string.h"#include <unistd.h>#include <sys/stat.h>#include <sys/types.h>#include <dirent.h>CPL_CVSID("$Id: cpl_vsil_unix_stdio_64.cpp,v 1.11 2006/03/27 15:24:41 fwarmerdam Exp $");#if defined(UNIX_STDIO_64)#ifndef VSI_FTELL64#define VSI_FTELL64 ftell64#endif#ifndef VSI_FSEEK64#define VSI_FSEEK64 fseek64#endif#ifndef VSI_FOPEN64#define VSI_FOPEN64 fopen64#endif#ifndef VSI_STAT64#define VSI_STAT64 stat64#endif#ifndef VSI_STAT64_T#define VSI_STAT64_T stat64#endif#else /* not UNIX_STDIO_64 */#ifndef VSI_FTELL64#define VSI_FTELL64 ftell#endif#ifndef VSI_FSEEK64#define VSI_FSEEK64 fseek#endif#ifndef VSI_FOPEN64#define VSI_FOPEN64 fopen#endif#ifndef VSI_STAT64#define VSI_STAT64 stat#endif#ifndef VSI_STAT64_T#define VSI_STAT64_T stat#endif#endif /* ndef UNIX_STDIO_64 *//************************************************************************//* ==================================================================== *//*                       VSIUnixStdioFilesystemHandler                  *//* ==================================================================== *//************************************************************************/class VSIUnixStdioFilesystemHandler : public VSIFilesystemHandler {public:    virtual VSIVirtualHandle *Open( const char *pszFilename,                                     const char *pszAccess);    virtual int      Stat( const char *pszFilename, VSIStatBufL *pStatBuf );    virtual int      Unlink( const char *pszFilename );    virtual int      Rename( const char *oldpath, const char *newpath );    virtual int      Mkdir( const char *pszDirname, long nMode );    virtual int      Rmdir( const char *pszDirname );    virtual char   **ReadDir( const char *pszDirname );};/************************************************************************//* ==================================================================== *//*                        VSIUnixStdioHandle                            *//* ==================================================================== *//************************************************************************/class VSIUnixStdioHandle : public VSIVirtualHandle{  public:    FILE          *fp;    virtual int       Seek( vsi_l_offset nOffset, int nWhence );    virtual vsi_l_offset Tell();    virtual size_t    Read( void *pBuffer, size_t nSize, size_t nMemb );    virtual size_t    Write( const void *pBuffer, size_t nSize, size_t nMemb );    virtual int       Eof();    virtual int       Flush();    virtual int       Close();};/************************************************************************//*                               Close()                                *//************************************************************************/int VSIUnixStdioHandle::Close(){    return fclose( fp );}/************************************************************************//*                                Seek()                                *//************************************************************************/int VSIUnixStdioHandle::Seek( vsi_l_offset nOffset, int nWhence ){    return( VSI_FSEEK64( fp, nOffset, nWhence ) );}/************************************************************************//*                                Tell()                                *//************************************************************************/vsi_l_offset VSIUnixStdioHandle::Tell(){    return( VSI_FTELL64( fp ) );}/************************************************************************//*                               Flush()                                *//************************************************************************/int VSIUnixStdioHandle::Flush(){    return fflush( fp );}/************************************************************************//*                                Read()                                *//************************************************************************/size_t VSIUnixStdioHandle::Read( void * pBuffer, size_t nSize, size_t nCount ){    return fread( pBuffer, nSize, nCount, fp );}/************************************************************************//*                               Write()                                *//************************************************************************/size_t VSIUnixStdioHandle::Write( const void * pBuffer, size_t nSize,                                   size_t nCount ){    return fwrite( pBuffer, nSize, nCount, fp );}/************************************************************************//*                                Eof()                                 *//************************************************************************/int VSIUnixStdioHandle::Eof(){    return feof( fp );}/************************************************************************//* ==================================================================== *//*                       VSIUnixStdioFilesystemHandler                  *//* ==================================================================== *//************************************************************************//************************************************************************//*                                Open()                                *//************************************************************************/VSIVirtualHandle *VSIUnixStdioFilesystemHandler::Open( const char *pszFilename,                                      const char *pszAccess ){    FILE *fp = VSI_FOPEN64( pszFilename, pszAccess );        if( fp == NULL )        return NULL;    VSIUnixStdioHandle *poHandle = new VSIUnixStdioHandle;        poHandle->fp = fp;    return poHandle;}/************************************************************************//*                                Stat()                                *//************************************************************************/int VSIUnixStdioFilesystemHandler::Stat( const char * pszFilename,                                          VSIStatBufL * pStatBuf ){    return( VSI_STAT64( pszFilename, pStatBuf ) );}/************************************************************************//*                               Unlink()                               *//************************************************************************/int VSIUnixStdioFilesystemHandler::Unlink( const char * pszFilename ){    return unlink( pszFilename );}/************************************************************************//*                               Rename()                               *//************************************************************************/int VSIUnixStdioFilesystemHandler::Rename( const char *oldpath,                                           const char *newpath ){    return rename( oldpath, newpath );}/************************************************************************//*                               Mkdir()                                *//************************************************************************/int VSIUnixStdioFilesystemHandler::Mkdir( const char * pszPathname,                                          long nMode ){    return mkdir( pszPathname, nMode );}/************************************************************************//*                               Rmdir()                                *//************************************************************************/int VSIUnixStdioFilesystemHandler::Rmdir( const char * pszPathname ){    return rmdir( pszPathname );}/************************************************************************//*                              ReadDir()                               *//************************************************************************/char **VSIUnixStdioFilesystemHandler::ReadDir( const char *pszPath ){    DIR           *hDir;    struct dirent *psDirEntry;    char          **papszDir = NULL;    if (strlen(pszPath) == 0)        pszPath = ".";    if ( (hDir = opendir(pszPath)) != NULL )    {        while( (psDirEntry = readdir(hDir)) != NULL )        {            papszDir = CSLAddString(papszDir, psDirEntry->d_name);        }        closedir( hDir );    }    else    {        /* Should we generate an error???           * For now we'll just return NULL (at the end of the function)         */    }    return papszDir;}/************************************************************************//*                     VSIInstallLargeFileHandler()                     *//************************************************************************/void VSIInstallLargeFileHandler(){    VSIFileManager::InstallHandler( string(""),                                     new VSIUnixStdioFilesystemHandler );}#endif /* ndef WIN32 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -