GDAL
|
Standard C Covers. More...
Go to the source code of this file.
Classes | |
struct | VSIDIREntry |
Directory entry. More... | |
Macros | |
#define | VSI_ISLNK(x) S_ISLNK(x) |
Test if the file is a symbolic link. | |
#define | VSI_ISREG(x) S_ISREG(x) |
Test if the file is a regular file. | |
#define | VSI_ISDIR(x) S_ISDIR(x) |
Test if the file is a directory. | |
#define | VSI_L_OFFSET_MAX GUINTBIG_MAX |
Maximum value for a file offset. | |
#define | VSI_STAT_EXISTS_FLAG 0x1 |
Flag provided to VSIStatExL() to test if the file exists. | |
#define | VSI_STAT_NATURE_FLAG 0x2 |
Flag provided to VSIStatExL() to query the nature (file/dir) of the file. | |
#define | VSI_STAT_SIZE_FLAG 0x4 |
Flag provided to VSIStatExL() to query the file size. | |
#define | VSI_STAT_SET_ERROR_FLAG 0x8 |
Flag provided to VSIStatExL() to issue a VSIError in case of failure. | |
#define | VSI_MALLOC_ALIGNED_AUTO_VERBOSE(size) VSIMallocAlignedAutoVerbose(size,__FILE__,__LINE__) |
VSIMallocAlignedAutoVerbose() with FILE and LINE reporting. | |
#define | VSI_MALLOC_VERBOSE(size) VSIMallocVerbose(size,__FILE__,__LINE__) |
VSI_MALLOC_VERBOSE. | |
#define | VSI_MALLOC2_VERBOSE(nSize1, nSize2) VSIMalloc2Verbose(nSize1,nSize2,__FILE__,__LINE__) |
VSI_MALLOC2_VERBOSE. | |
#define | VSI_MALLOC3_VERBOSE(nSize1, nSize2, nSize3) VSIMalloc3Verbose(nSize1,nSize2,nSize3,__FILE__,__LINE__) |
VSI_MALLOC3_VERBOSE. | |
#define | VSI_CALLOC_VERBOSE(nCount, nSize) VSICallocVerbose(nCount,nSize,__FILE__,__LINE__) |
VSI_CALLOC_VERBOSE. | |
#define | VSI_REALLOC_VERBOSE(pOldPtr, nNewSize) VSIReallocVerbose(pOldPtr,nNewSize,__FILE__,__LINE__) |
VSI_REALLOC_VERBOSE. | |
#define | VSI_STRDUP_VERBOSE(pszStr) VSIStrdupVerbose(pszStr,__FILE__,__LINE__) |
VSI_STRDUP_VERBOSE. | |
#define | CPLReadDir VSIReadDir |
Alias of VSIReadDir() | |
Typedefs | |
typedef GUIntBig | vsi_l_offset |
Type for a file offset. | |
typedef FILE | VSILFILE |
Opaque type for a FILE that implements the VSIVirtualHandle API. | |
typedef struct VSI_STAT64_T | VSIStatBufL |
Type for VSIStatL() | |
typedef struct VSIDIR | VSIDIR |
Opaque type for a directory iterator. | |
typedef struct VSIDIREntry | VSIDIREntry |
Directory entry. More... | |
typedef size_t(* | VSIWriteFunction) (const void *ptr, size_t size, size_t nmemb, FILE *stream) |
Callback used by VSIStdoutSetRedirection() | |
Enumerations | |
enum | VSIRangeStatus { VSI_RANGE_STATUS_UNKNOWN, VSI_RANGE_STATUS_DATA, VSI_RANGE_STATUS_HOLE } |
Range status. More... | |
Functions | |
VSILFILE * | VSIFOpenL (const char *, const char *) CPL_WARN_UNUSED_RESULT |
Open file. More... | |
VSILFILE * | VSIFOpenExL (const char *, const char *, int) CPL_WARN_UNUSED_RESULT |
Open file. More... | |
int | VSIFCloseL (VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Close file. More... | |
int | VSIFSeekL (VSILFILE *, vsi_l_offset, int) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Seek to requested offset. More... | |
vsi_l_offset | VSIFTellL (VSILFILE *) CPL_WARN_UNUSED_RESULT |
Tell current file offset. More... | |
void | VSIRewindL (VSILFILE *) |
Rewind the file pointer to the beginning of the file. More... | |
size_t | VSIFReadL (void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Read bytes from file. More... | |
int | VSIFReadMultiRangeL (int nRanges, void **ppData, const vsi_l_offset *panOffsets, const size_t *panSizes, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Read several ranges of bytes from file. More... | |
size_t | VSIFWriteL (const void *, size_t, size_t, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Write bytes to file. More... | |
int | VSIFEofL (VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Test for end of file. More... | |
int | VSIFTruncateL (VSILFILE *, vsi_l_offset) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Truncate/expand the file to the specified size. More... | |
int | VSIFFlushL (VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Flush pending writes to disk. More... | |
int | VSIFPrintfL (VSILFILE *, const char *,...) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Formatted write to file. More... | |
int | VSIFPutcL (int, VSILFILE *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT |
Write a single byte to the file. More... | |
VSIRangeStatus | VSIFGetRangeStatusL (VSILFILE *fp, vsi_l_offset nStart, vsi_l_offset nLength) |
Return if a given file range contains data or holes filled with zeroes. More... | |
int | VSIIngestFile (VSILFILE *fp, const char *pszFilename, GByte **ppabyRet, vsi_l_offset *pnSize, GIntBig nMaxSize) CPL_WARN_UNUSED_RESULT |
Ingest a file into memory. More... | |
int | VSIStatL (const char *, VSIStatBufL *) CPL_WARN_UNUSED_RESULT |
Get filesystem object info. More... | |
int | VSIStatExL (const char *pszFilename, VSIStatBufL *psStatBuf, int nFlags) CPL_WARN_UNUSED_RESULT |
Get filesystem object info. More... | |
int | VSIIsCaseSensitiveFS (const char *pszFilename) |
Returns if the filenames of the filesystem are case sensitive. More... | |
int | VSISupportsSparseFiles (const char *pszPath) |
Returns if the filesystem supports sparse files. More... | |
int | VSIHasOptimizedReadMultiRange (const char *pszPath) |
Returns if the filesystem supports efficient multi-range reading. More... | |
const char * | VSIGetActualURL (const char *pszFilename) |
Returns the actual URL of a supplied filename. More... | |
char * | VSIGetSignedURL (const char *pszFilename, CSLConstList papszOptions) |
Returns a signed URL of a supplied filename. More... | |
const char * | VSIGetFileSystemOptions (const char *pszFilename) |
Return the list of options associated with a virtual file system handler as a serialized XML string. More... | |
char ** | VSIGetFileSystemsPrefixes (void) |
Return the list of prefixes for virtual file system handlers currently registered. More... | |
void * | VSIFGetNativeFileDescriptorL (VSILFILE *) |
Returns the "native" file descriptor for the virtual handle. More... | |
void * | VSICalloc (size_t, size_t) CPL_WARN_UNUSED_RESULT |
Analog of calloc(). More... | |
void * | VSIMalloc (size_t) CPL_WARN_UNUSED_RESULT |
Analog of malloc(). More... | |
void | VSIFree (void *) |
Analog of free() for data allocated with VSIMalloc(), VSICalloc(), VSIRealloc() | |
void * | VSIRealloc (void *, size_t) CPL_WARN_UNUSED_RESULT |
Analog of realloc(). More... | |
char * | VSIStrdup (const char *) CPL_WARN_UNUSED_RESULT |
Analog of strdup(). More... | |
void * | VSIMallocAligned (size_t nAlignment, size_t nSize) CPL_WARN_UNUSED_RESULT |
Allocates a buffer with an alignment constraint. More... | |
void * | VSIMallocAlignedAuto (size_t nSize) CPL_WARN_UNUSED_RESULT |
Allocates a buffer with an alignment constraint such that it can be used by the most demanding vector instruction set on that platform. More... | |
void | VSIFreeAligned (void *ptr) |
Free a buffer allocated with VSIMallocAligned(). More... | |
void * | VSIMallocAlignedAutoVerbose (size_t nSize, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
See VSIMallocAlignedAuto() | |
void * | VSIMalloc2 (size_t nSize1, size_t nSize2) CPL_WARN_UNUSED_RESULT |
VSIMalloc2 allocates (nSize1 * nSize2) bytes. More... | |
void * | VSIMalloc3 (size_t nSize1, size_t nSize2, size_t nSize3) CPL_WARN_UNUSED_RESULT |
VSIMalloc3 allocates (nSize1 * nSize2 * nSize3) bytes. More... | |
void * | VSIMallocVerbose (size_t nSize, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSIMallocVerbose. | |
void * | VSIMalloc2Verbose (size_t nSize1, size_t nSize2, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSIMalloc2Verbose. | |
void * | VSIMalloc3Verbose (size_t nSize1, size_t nSize2, size_t nSize3, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSIMalloc3Verbose. | |
void * | VSICallocVerbose (size_t nCount, size_t nSize, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSICallocVerbose. | |
void * | VSIReallocVerbose (void *pOldPtr, size_t nNewSize, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSIReallocVerbose. | |
char * | VSIStrdupVerbose (const char *pszStr, const char *pszFile, int nLine) CPL_WARN_UNUSED_RESULT |
VSIStrdupVerbose. | |
GIntBig | CPLGetPhysicalRAM (void) |
Return the total physical RAM in bytes. More... | |
GIntBig | CPLGetUsablePhysicalRAM (void) |
Return the total physical RAM, usable by a process, in bytes. More... | |
char ** | VSIReadDir (const char *) |
Read names in a directory. More... | |
char ** | VSIReadDirRecursive (const char *pszPath) |
Read names in a directory recursively. More... | |
char ** | VSIReadDirEx (const char *pszPath, int nMaxFiles) |
Read names in a directory. More... | |
VSIDIR * | VSIOpenDir (const char *pszPath, int nRecurseDepth, const char *const *papszOptions) |
Open a directory to read its entries. More... | |
const VSIDIREntry * | VSIGetNextDirEntry (VSIDIR *dir) |
Return the next entry of the directory. More... | |
void | VSICloseDir (VSIDIR *dir) |
Close a directory. More... | |
int | VSIMkdir (const char *pszPathname, long mode) |
Create a directory. More... | |
int | VSIMkdirRecursive (const char *pszPathname, long mode) |
Create a directory and all its ancestors. More... | |
int | VSIRmdir (const char *pszDirname) |
Delete a directory. More... | |
int | VSIRmdirRecursive (const char *pszDirname) |
Delete a directory recursively. More... | |
int | VSIUnlink (const char *pszFilename) |
Delete a file. More... | |
int | VSIRename (const char *oldpath, const char *newpath) |
Rename a file. More... | |
int | VSISync (const char *pszSource, const char *pszTarget, const char *const *papszOptions, GDALProgressFunc pProgressFunc, void *pProgressData, char ***ppapszOutputs) |
Synchronize a source file/directory with a target file/directory. More... | |
char * | VSIStrerror (int) |
Return the error string corresponding to the error number. More... | |
GIntBig | VSIGetDiskFreeSpace (const char *pszDirname) |
Return free disk space available on the filesystem. More... | |
void | VSIInstallMemFileHandler (void) |
Install "memory" file system handler. More... | |
void | VSIInstallSubFileHandler (void) |
Install /vsisubfile/ virtual file handler. More... | |
void | VSIInstallCurlFileHandler (void) |
Install /vsicurl/ HTTP/FTP file system handler (requires libcurl) More... | |
void | VSICurlClearCache (void) |
Clean local cache associated with /vsicurl/ (and related file systems) More... | |
void | VSICurlPartialClearCache (const char *pszFilenamePrefix) |
Clean local cache associated with /vsicurl/ (and related file systems) for a given filename (and its subfiles and subdirectories if it is a directory) More... | |
void | VSIInstallCurlStreamingFileHandler (void) |
Install /vsicurl_streaming/ HTTP/FTP file system handler (requires libcurl). More... | |
void | VSIInstallS3FileHandler (void) |
Install /vsis3/ Amazon S3 file system handler (requires libcurl) More... | |
void | VSIInstallS3StreamingFileHandler (void) |
Install /vsis3_streaming/ Amazon S3 file system handler (requires libcurl). More... | |
void | VSIInstallGSFileHandler (void) |
Install /vsigs/ Google Cloud Storage file system handler (requires libcurl) More... | |
void | VSIInstallGSStreamingFileHandler (void) |
Install /vsigs_streaming/ Google Cloud Storage file system handler (requires libcurl) More... | |
void | VSIInstallAzureFileHandler (void) |
Install /vsiaz/ Microsoft Azure Blob file system handler (requires libcurl) More... | |
void | VSIInstallAzureStreamingFileHandler (void) |
Install /vsiaz_streaming/ Microsoft Azure Blob file system handler (requires libcurl) More... | |
void | VSIInstallOSSFileHandler (void) |
Install /vsioss/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl) More... | |
void | VSIInstallOSSStreamingFileHandler (void) |
Install /vsioss_streaming/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl) More... | |
void | VSIInstallSwiftFileHandler (void) |
Install /vsiswift/ OpenStack Swif Object Storage (Swift) file system handler (requires libcurl) More... | |
void | VSIInstallSwiftStreamingFileHandler (void) |
Install /vsiswift_streamin/ OpenStack Swif Object Storage (Swift) file system handler (requires libcurl) More... | |
void | VSIInstallGZipFileHandler (void) |
Install GZip file system handler. More... | |
void | VSIInstallZipFileHandler (void) |
Install ZIP file system handler. More... | |
void | VSIInstallStdinHandler (void) |
Install /vsistdin/ file system handler. More... | |
void | VSIInstallHdfsHandler (void) |
Install /vsihdfs/ file system handler (requires JVM and HDFS support) More... | |
void | VSIInstallWebHdfsHandler (void) |
Install /vsiwebhdfs/ WebHDFS (Hadoop File System) REST API file system handler (requires libcurl) More... | |
void | VSIInstallStdoutHandler (void) |
Install /vsistdout/ file system handler. More... | |
void | VSIInstallSparseFileHandler (void) |
Install /vsisparse/ virtual file handler. More... | |
void | VSIInstallTarFileHandler (void) |
Install /vsitar/ file system handler. More... | |
void | VSIInstallCryptFileHandler (void) |
Install /vsicrypt/ encrypted file system handler (requires libcrypto++) More... | |
void | VSISetCryptKey (const GByte *pabyKey, int nKeySize) |
Installs the encryption/decryption key. More... | |
VSILFILE * | VSIFileFromMemBuffer (const char *pszFilename, GByte *pabyData, vsi_l_offset nDataLength, int bTakeOwnership) CPL_WARN_UNUSED_RESULT |
Create memory "file" from a buffer. More... | |
GByte * | VSIGetMemFileBuffer (const char *pszFilename, vsi_l_offset *pnDataLength, int bUnlinkAndSeize) |
Fetch buffer underlying memory file. More... | |
void | VSIStdoutSetRedirection (VSIWriteFunction pFct, FILE *stream) |
Set an alternative write function and output file handle instead of fwrite() / stdout. More... | |
Standard C Covers.
The VSI functions are intended to be hookable aliases for Standard C I/O, memory allocation and other system functions. They are intended to allow virtualization of disk I/O so that non file data sources can be made to appear as files, and so that additional error trapping and reporting can be interested. The memory access API is aliased so that special application memory management services can be used.
It is intended that each of these functions retains exactly the same calling pattern as the original Standard C functions they relate to. This means we don't have to provide custom documentation, and also means that the default implementation is very simple.
typedef struct VSIDIREntry VSIDIREntry |
Directory entry.
enum VSIRangeStatus |
GIntBig CPLGetPhysicalRAM | ( | void | ) |
Return the total physical RAM in bytes.
In the context of a container using cgroups (typically Docker), this will take into account that limitation (starting with GDAL 2.4.0)
You should generally use CPLGetUsablePhysicalRAM() instead.
GIntBig CPLGetUsablePhysicalRAM | ( | void | ) |
Return the total physical RAM, usable by a process, in bytes.
This is the same as CPLGetPhysicalRAM() except it will limit to 2 GB for 32 bit processes.
Starting with GDAL 2.4.0, it will also take account resource limits on Posix systems.
Note: This memory may already be partly used by other processes.
void* VSICalloc | ( | size_t | nCount, |
size_t | nSize | ||
) |
Analog of calloc().
Use VSIFree() to free
void VSICloseDir | ( | VSIDIR * | dir | ) |
Close a directory.
This function is close to the POSIX closedir() function.
dir | Directory handled returned by VSIOpenDir(). |
void VSICurlClearCache | ( | void | ) |
Clean local cache associated with /vsicurl/ (and related file systems)
/vsicurl (and related file systems like /vsis3/, /vsigs/, /vsiaz/, /vsioss/, /vsiswift/) cache a number of metadata and data for faster execution in read-only scenarios. But when the content on the server-side may change during the same process, those mechanisms can prevent opening new files, or give an outdated version of them.
void VSICurlPartialClearCache | ( | const char * | pszFilenamePrefix | ) |
Clean local cache associated with /vsicurl/ (and related file systems) for a given filename (and its subfiles and subdirectories if it is a directory)
/vsicurl (and related file systems like /vsis3/, /vsigs/, /vsiaz/, /vsioss/, /vsiswift/) cache a number of metadata and data for faster execution in read-only scenarios. But when the content on the server-side may change during the same process, those mechanisms can prevent opening new files, or give an outdated version of them.
pszFilenamePrefix | Filename prefix |
int VSIFCloseL | ( | VSILFILE * | fp | ) |
Close file.
This function closes the indicated file.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fclose() function.
fp | file handle opened with VSIFOpenL(). Passing a nullptr produces undefined behavior. |
int VSIFEofL | ( | VSILFILE * | fp | ) |
Test for end of file.
Returns TRUE (non-zero) if an end-of-file condition occurred during the previous read operation. The end-of-file flag is cleared by a successful VSIFSeekL() call.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX feof() call.
fp | file handle opened with VSIFOpenL(). |
int VSIFFlushL | ( | VSILFILE * | fp | ) |
Flush pending writes to disk.
For files in write or update mode and on filesystem types where it is applicable, all pending output on the file is flushed to the physical disk.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fflush() call.
fp | file handle opened with VSIFOpenL(). |
void* VSIFGetNativeFileDescriptorL | ( | VSILFILE * | fp | ) |
Returns the "native" file descriptor for the virtual handle.
This will only return a non-NULL value for "real" files handled by the operating system (to be opposed to GDAL virtual file systems).
On POSIX systems, this will be a integer value ("fd") cast as a void*. On Windows systems, this will be the HANDLE.
fp | file handle opened with VSIFOpenL(). |
VSIRangeStatus VSIFGetRangeStatusL | ( | VSILFILE * | fp, |
vsi_l_offset | nOffset, | ||
vsi_l_offset | nLength | ||
) |
Return if a given file range contains data or holes filled with zeroes.
This uses the filesystem capabilities of querying which regions of a sparse file are allocated or not. This is currently only implemented for Linux (and no other Unix derivatives) and Windows.
Note: A return of VSI_RANGE_STATUS_DATA doesn't exclude that the extent is filled with zeroes! It must be interpreted as "may contain non-zero data".
fp | file handle opened with VSIFOpenL(). |
nOffset | offset of the start of the extent. |
nLength | extent length. |
VSILFILE* VSIFileFromMemBuffer | ( | const char * | pszFilename, |
GByte * | pabyData, | ||
vsi_l_offset | nDataLength, | ||
int | bTakeOwnership | ||
) |
Create memory "file" from a buffer.
A virtual memory file is created from the passed buffer with the indicated filename. Under normal conditions the filename would need to be absolute and within the /vsimem/ portion of the filesystem.
If bTakeOwnership is TRUE, then the memory file system handler will take ownership of the buffer, freeing it when the file is deleted. Otherwise it remains the responsibility of the caller, but should not be freed as long as it might be accessed as a file. In no circumstances does this function take a copy of the pabyData contents.
pszFilename | the filename to be created. |
pabyData | the data buffer for the file. |
nDataLength | the length of buffer in bytes. |
bTakeOwnership | TRUE to transfer "ownership" of buffer or FALSE. |
VSILFILE* VSIFOpenExL | ( | const char * | pszFilename, |
const char * | pszAccess, | ||
int | bSetError | ||
) |
Open file.
This function opens a file with the desired access. Large files (larger than 2GB) should be supported. Binary access is always implied and the "b" does not need to be included in the pszAccess string.
Note that the "VSILFILE *" returned by this function is NOT a standard C library FILE *, and cannot be used with any functions other than the "VSI*L" family of functions. They aren't "real" FILE objects.
On windows it is possible to define the configuration option GDAL_FILE_IS_UTF8 to have pszFilename treated as being in the local encoding instead of UTF-8, restoring the pre-1.8.0 behavior of VSIFOpenL().
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fopen() function.
pszFilename | the file to open. UTF-8 encoded. |
pszAccess | access requested (i.e. "r", "r+", "w") |
bSetError | flag determining whether or not this open call should set VSIErrors on failure. |
VSILFILE* VSIFOpenL | ( | const char * | pszFilename, |
const char * | pszAccess | ||
) |
Open file.
This function opens a file with the desired access. Large files (larger than 2GB) should be supported. Binary access is always implied and the "b" does not need to be included in the pszAccess string.
Note that the "VSILFILE *" returned since GDAL 1.8.0 by this function is NOT a standard C library FILE *, and cannot be used with any functions other than the "VSI*L" family of functions. They aren't "real" FILE objects.
On windows it is possible to define the configuration option GDAL_FILE_IS_UTF8 to have pszFilename treated as being in the local encoding instead of UTF-8, restoring the pre-1.8.0 behavior of VSIFOpenL().
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fopen() function.
pszFilename | the file to open. UTF-8 encoded. |
pszAccess | access requested (i.e. "r", "r+", "w") |
int VSIFPrintfL | ( | VSILFILE * | fp, |
const char * | pszFormat, | ||
... | |||
) |
Formatted write to file.
Provides fprintf() style formatted output to a VSI*L file. This formats an internal buffer which is written using VSIFWriteL().
Analog of the POSIX fprintf() call.
fp | file handle opened with VSIFOpenL(). |
pszFormat | the printf() style format string. |
int VSIFPutcL | ( | int | nChar, |
VSILFILE * | fp | ||
) |
Write a single byte to the file.
Writes the character nChar, cast to an unsigned char, to file.
Almost an analog of the POSIX fputc() call, except that it returns the number of character written (1 or 0), and not the (cast) character itself or EOF.
nChar | character to write. |
fp | file handle opened with VSIFOpenL(). |
size_t VSIFReadL | ( | void * | pBuffer, |
size_t | nSize, | ||
size_t | nCount, | ||
VSILFILE * | fp | ||
) |
Read bytes from file.
Reads nCount objects of nSize bytes from the indicated file at the current offset into the indicated buffer.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fread() call.
pBuffer | the buffer into which the data should be read (at least nCount * nSize bytes in size. |
nSize | size of objects to read in bytes. |
nCount | number of objects to read. |
fp | file handle opened with VSIFOpenL(). |
int VSIFReadMultiRangeL | ( | int | nRanges, |
void ** | ppData, | ||
const vsi_l_offset * | panOffsets, | ||
const size_t * | panSizes, | ||
VSILFILE * | fp | ||
) |
Read several ranges of bytes from file.
Reads nRanges objects of panSizes[i] bytes from the indicated file at the offset panOffsets[i] into the buffer ppData[i].
Ranges must be sorted in ascending start offset, and must not overlap each other.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory or /vsicurl/.
nRanges | number of ranges to read. |
ppData | array of nRanges buffer into which the data should be read (ppData[i] must be at list panSizes[i] bytes). |
panOffsets | array of nRanges offsets at which the data should be read. |
panSizes | array of nRanges sizes of objects to read (in bytes). |
fp | file handle opened with VSIFOpenL(). |
void VSIFreeAligned | ( | void * | ptr | ) |
int VSIFSeekL | ( | VSILFILE * | fp, |
vsi_l_offset | nOffset, | ||
int | nWhence | ||
) |
Seek to requested offset.
Seek to the desired offset (nOffset) in the indicated file.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fseek() call.
Caution: vsi_l_offset is a unsigned type, so SEEK_CUR can only be used for positive seek. If negative seek is needed, use VSIFSeekL( fp, VSIFTellL(fp) + negative_offset, SEEK_SET ).
fp | file handle opened with VSIFOpenL(). |
nOffset | offset in bytes. |
nWhence | one of SEEK_SET, SEEK_CUR or SEEK_END. |
vsi_l_offset VSIFTellL | ( | VSILFILE * | fp | ) |
Tell current file offset.
Returns the current file read/write offset in bytes from the beginning of the file.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX ftell() call.
fp | file handle opened with VSIFOpenL(). |
int VSIFTruncateL | ( | VSILFILE * | fp, |
vsi_l_offset | nNewSize | ||
) |
Truncate/expand the file to the specified size.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX ftruncate() call.
fp | file handle opened with VSIFOpenL(). |
nNewSize | new size in bytes. |
size_t VSIFWriteL | ( | const void * | pBuffer, |
size_t | nSize, | ||
size_t | nCount, | ||
VSILFILE * | fp | ||
) |
Write bytes to file.
Writess nCount objects of nSize bytes to the indicated file at the current offset into the indicated buffer.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX fwrite() call.
pBuffer | the buffer from which the data should be written (at least nCount * nSize bytes in size. |
nSize | size of objects to read in bytes. |
nCount | number of objects to read. |
fp | file handle opened with VSIFOpenL(). |
const char* VSIGetActualURL | ( | const char * | pszFilename | ) |
Returns the actual URL of a supplied filename.
Currently only returns a non-NULL value for network-based virtual file systems. For example "/vsis3/bucket/filename" will be expanded as "https://bucket.s3.amazon.com/filename"
Note that the lifetime of the returned string, is short, and may be invalidated by any following GDAL functions.
pszFilename | the path of the filesystem object. UTF-8 encoded. |
GIntBig VSIGetDiskFreeSpace | ( | const char * | pszDirname | ) |
Return free disk space available on the filesystem.
This function returns the free disk space available on the filesystem.
pszDirname | a directory of the filesystem to query. |
const char* VSIGetFileSystemOptions | ( | const char * | pszFilename | ) |
Return the list of options associated with a virtual file system handler as a serialized XML string.
Those options may be set as configuration options with CPLSetConfigOption().
pszFilename | a filename, or prefix of a virtual file system handler. |
char** VSIGetFileSystemsPrefixes | ( | void | ) |
Return the list of prefixes for virtual file system handlers currently registered.
Typically: "", "/vsimem/", "/vsicurl/", etc
GByte* VSIGetMemFileBuffer | ( | const char * | pszFilename, |
vsi_l_offset * | pnDataLength, | ||
int | bUnlinkAndSeize | ||
) |
Fetch buffer underlying memory file.
This function returns a pointer to the memory buffer underlying a virtual "in memory" file. If bUnlinkAndSeize is TRUE the filesystem object will be deleted, and ownership of the buffer will pass to the caller otherwise the underlying file will remain in existence.
pszFilename | the name of the file to grab the buffer of. |
pnDataLength | (file) length returned in this variable. |
bUnlinkAndSeize | TRUE to remove the file, or FALSE to leave unaltered. |
const VSIDIREntry* VSIGetNextDirEntry | ( | VSIDIR * | dir | ) |
Return the next entry of the directory.
This function is close to the POSIX readdir() function. It actually returns more information (file size, last modification time), which on 'real' file systems involve one 'stat' call per file.
For filesystems that can have both a regular file and a directory name of the same name (typically /vsis3/), when this situation of duplicate happens, the directory name will be suffixed by a slash character. Otherwise directory names are not suffixed by slash.
The returned entry remains valid until the next call to VSINextDirEntry() or VSICloseDir() with the same handle.
dir | Directory handled returned by VSIOpenDir(). Must not be NULL. |
char* VSIGetSignedURL | ( | const char * | pszFilename, |
CSLConstList | papszOptions | ||
) |
Returns a signed URL of a supplied filename.
Currently only returns a non-NULL value for /vsis3/, /vsigs/, /vsiaz/ and /vsioss/ For example "/vsis3/bucket/filename" will be expanded as "https://bucket.s3.amazon.com/filename?X-Amz-Algorithm=AWS4-HMAC-SHA256..." Configuration options that apply for file opening (typically to provide credentials), and are returned by VSIGetFileSystemOptions(), are also valid in that context.
pszFilename | the path of the filesystem object. UTF-8 encoded. |
papszOptions | list of options, or NULL. Depend on file system handler. For /vsis3/, /vsigs/, /vsiaz/ and /vsioss/, the following options are supported:
|
/vsiaz/ supports additional options:
int VSIHasOptimizedReadMultiRange | ( | const char * | pszPath | ) |
Returns if the filesystem supports efficient multi-range reading.
Currently only returns TRUE for /vsicurl/ and derived file systems.
pszPath | the path of the filesystem object to be tested. UTF-8 encoded. |
int VSIIngestFile | ( | VSILFILE * | fp, |
const char * | pszFilename, | ||
GByte ** | ppabyRet, | ||
vsi_l_offset * | pnSize, | ||
GIntBig | nMaxSize | ||
) |
Ingest a file into memory.
Read the whole content of a file into a memory buffer.
Either fp or pszFilename can be NULL, but not both at the same time.
If fp is passed non-NULL, it is the responsibility of the caller to close it.
If non-NULL, the returned buffer is guaranteed to be NUL-terminated.
fp | file handle opened with VSIFOpenL(). |
pszFilename | filename. |
ppabyRet | pointer to the target buffer. *ppabyRet must be freed with VSIFree() |
pnSize | pointer to variable to store the file size. May be NULL. |
nMaxSize | maximum size of file allowed. If no limit, set to a negative value. |
void VSIInstallAzureFileHandler | ( | void | ) |
Install /vsiaz/ Microsoft Azure Blob file system handler (requires libcurl)
void VSIInstallAzureStreamingFileHandler | ( | void | ) |
Install /vsiaz_streaming/ Microsoft Azure Blob file system handler (requires libcurl)
void VSIInstallCryptFileHandler | ( | void | ) |
Install /vsicrypt/ encrypted file system handler (requires libcrypto++)
A special file handler is installed that allows reading/creating/update encrypted files on the fly, with random access capabilities.
The cryptographic algorithms used are block ciphers, with symmetric key.
In their simplest form, recognized filenames are of the form /vsicrypt//absolute_path/to/file, /vsicrypt/c:/absolute_path/to/file or /vsicrypt/relative/path/to/file.
Options can also be used with the following format : /vsicrypt/option1=val1,option2=val2,...,file=/path/to/file
They can also be passed as configuration option/environment variable, because in some use cases, the syntax with option in the filename might not properly work with some drivers.
In all modes, the encryption key must be provided. There are several ways of doing so :
When creating a file, if key=GENERATE_IT or VSICRYPT_KEY=GENERATE_IT is passed, the encryption key will be generated from the pseudo-random number generator of the operating system. The key will be displayed on the standard error stream in a Base64 form (unless the VSICRYPT_DISPLAY_GENERATED_KEY configuration option is set to OFF), and the VSICRYPT_KEY_B64 configuration option will also be set with the Base64 form of the key (so that CPLGetConfigOption("VSICRYPT_KEY_B64", NULL) can be used to get it back).
The available options are :
iv=initial_vector_as_text: to specify the Initial Vector. This is an advanced option that should generally NOT be used. It is only useful to get completely deterministic output given the plaintext, key and other parameters, which in general NOT what you want to do. By default, a random initial vector of the appropriate size will be generated for each new file created. Only used on creation. Ignored otherwise. Also available as VSICRYPT_IV configuration option.
This special file handler can be combined with other virtual filesystems handlers, such as /vsizip. For example, /vsicrypt//vsicurl/path/to/remote/encrypted/file.tif
Implementation details:
The structure of encrypted files is the following: a header, immediately followed by the encrypted payload (by sectors, i.e. chunks of sector_size bytes).
The header structure is the following :
This design does not provide any means of authentication or integrity check.
Each sector is encrypted/decrypted independently of other sectors. For that, the Initial Vector contained in the header is XOR'ed with the file offset (relative to plain text file) of the start of the sector being processed, as a 8-byte integer. More precisely, the first byte of the main IV is XOR'ed with the 8 least-significant bits of the sector offset, the second byte of the main IV is XOR'ed with the following 8 bits of the sector offset, etc... until the 8th byte.
This design could potentially be prone to chosen-plaintext attack, for example if the attacker managed to get (part of) an existing encrypted file to be encrypted from plaintext he might have selected.
Note: if "hostile" code can explore process content, or attach to it with a debugger, it might be relatively easy to retrieve the encryption key. A GDAL plugin could for example get the content of configuration options, or list opened datasets and see the key/key_b64 values, so disabling plugin loading might be a first step, as well as linking statically GDAL to application code. If plugin loading is enabled or GDAL dynamically linked, using VSISetCryptKey() to set the key might make it a bit more complicated to spy the key. But, as said initially, this is in no way a perfect protection.
void VSIInstallCurlFileHandler | ( | void | ) |
Install /vsicurl/ HTTP/FTP file system handler (requires libcurl)
void VSIInstallCurlStreamingFileHandler | ( | void | ) |
Install /vsicurl_streaming/ HTTP/FTP file system handler (requires libcurl).
void VSIInstallGSFileHandler | ( | void | ) |
Install /vsigs/ Google Cloud Storage file system handler (requires libcurl)
void VSIInstallGSStreamingFileHandler | ( | void | ) |
Install /vsigs_streaming/ Google Cloud Storage file system handler (requires libcurl)
void VSIInstallGZipFileHandler | ( | void | ) |
Install GZip file system handler.
A special file handler is installed that allows reading on-the-fly and writing in GZip (.gz) files.
All portions of the file system underneath the base path "/vsigzip/" will be handled by this driver.
Additional documentation is to be found at: http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip
void VSIInstallHdfsHandler | ( | void | ) |
Install /vsihdfs/ file system handler (requires JVM and HDFS support)
void VSIInstallMemFileHandler | ( | void | ) |
Install "memory" file system handler.
A special file handler is installed that allows block of memory to be treated as files. All portions of the file system underneath the base path "/vsimem/" will be handled by this driver.
Normal VSI*L functions can be used freely to create and destroy memory arrays treating them as if they were real file system objects. Some additional methods exist to efficient create memory file system objects without duplicating original copies of the data or to "steal" the block of memory associated with a memory file.
Directory related functions are supported.
This code example demonstrates using GDAL to translate from one memory buffer to another.
void VSIInstallOSSFileHandler | ( | void | ) |
Install /vsioss/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl)
void VSIInstallOSSStreamingFileHandler | ( | void | ) |
Install /vsioss_streaming/ Alibaba Cloud Object Storage Service (OSS) file system handler (requires libcurl)
void VSIInstallS3FileHandler | ( | void | ) |
Install /vsis3/ Amazon S3 file system handler (requires libcurl)
void VSIInstallS3StreamingFileHandler | ( | void | ) |
Install /vsis3_streaming/ Amazon S3 file system handler (requires libcurl).
void VSIInstallSparseFileHandler | ( | void | ) |
Install /vsisparse/ virtual file handler.
void VSIInstallStdinHandler | ( | void | ) |
Install /vsistdin/ file system handler.
A special file handler is installed that allows reading from the standard input stream.
The file operations available are of course limited to Read() and forward Seek() (full seek in the first MB of a file).
void VSIInstallStdoutHandler | ( | void | ) |
Install /vsistdout/ file system handler.
A special file handler is installed that allows writing to the standard output stream.
The file operations available are of course limited to Write().
A variation of this file system exists as the /vsistdout_redirect/ file system handler, where the output function can be defined with VSIStdoutSetRedirection().
void VSIInstallSubFileHandler | ( | void | ) |
Install /vsisubfile/ virtual file handler.
void VSIInstallSwiftFileHandler | ( | void | ) |
Install /vsiswift/ OpenStack Swif Object Storage (Swift) file system handler (requires libcurl)
void VSIInstallSwiftStreamingFileHandler | ( | void | ) |
Install /vsiswift_streamin/ OpenStack Swif Object Storage (Swift) file system handler (requires libcurl)
void VSIInstallTarFileHandler | ( | void | ) |
Install /vsitar/ file system handler.
A special file handler is installed that allows reading on-the-fly in TAR (regular .tar, or compressed .tar.gz/.tgz) archives.
All portions of the file system underneath the base path "/vsitar/" will be handled by this driver.
The syntax to open a file inside a tar file is /vsitar/path/to/the/file.tar/path/inside/the/tar/file were path/to/the/file.tar is relative or absolute and path/inside/the/tar/file is the relative path to the file inside the archive.
Starting with GDAL 2.2, an alternate syntax is available so as to enable chaining and not being dependent on .tar extension : /vsitar/{/path/to/the/archive}/path/inside/the/tar/file. Note that /path/to/the/archive may also itself this alternate syntax.
If the path is absolute, it should begin with a / on a Unix-like OS (or C:\ on Windows), so the line looks like /vsitar//home/gdal/... For example gdalinfo /vsitar/myarchive.tar/subdir1/file1.tif
Syntactic sugar : if the tar archive contains only one file located at its root, just mentionning "/vsitar/path/to/the/file.tar" will work
VSIStatL() will return the uncompressed size in st_size member and file nature- file or directory - in st_mode member.
Directory listing is available through VSIReadDir().
void VSIInstallWebHdfsHandler | ( | void | ) |
Install /vsiwebhdfs/ WebHDFS (Hadoop File System) REST API file system handler (requires libcurl)
void VSIInstallZipFileHandler | ( | void | ) |
Install ZIP file system handler.
A special file handler is installed that allows reading on-the-fly in ZIP (.zip) archives.
All portions of the file system underneath the base path "/vsizip/" will be handled by this driver.
The syntax to open a file inside a zip file is /vsizip/path/to/the/file.zip/path/inside/the/zip/file where path/to/the/file.zip is relative or absolute and path/inside/the/zip/file is the relative path to the file inside the archive.
Starting with GDAL 2.2, an alternate syntax is available so as to enable chaining and not being dependent on .zip extension : /vsizip/{/path/to/the/archive}/path/inside/the/zip/file. Note that /path/to/the/archive may also itself use this alternate syntax.
If the path is absolute, it should begin with a / on a Unix-like OS (or C:\ on Windows), so the line looks like /vsizip//home/gdal/... For example gdalinfo /vsizip/myarchive.zip/subdir1/file1.tif
Syntactic sugar : if the .zip file contains only one file located at its root, just mentioning "/vsizip/path/to/the/file.zip" will work
VSIStatL() will return the uncompressed size in st_size member and file nature- file or directory - in st_mode member.
Directory listing is available through VSIReadDir().
Since GDAL 1.8.0, write capabilities are available. They allow creating a new zip file and adding new files to an already existing (or just created) zip file. Read and write operations cannot be interleaved : the new zip must be closed before being re-opened for read.
Additional documentation is to be found at http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip
int VSIIsCaseSensitiveFS | ( | const char * | pszFilename | ) |
Returns if the filenames of the filesystem are case sensitive.
This method retrieves to which filesystem belongs the passed filename and return TRUE if the filenames of that filesystem are case sensitive.
Currently, this will return FALSE only for Windows real filenames. Other VSI virtual filesystems are case sensitive.
This methods avoid ugly #ifndef WIN32 / #endif code, that is wrong when dealing with virtual filenames.
pszFilename | the path of the filesystem object to be tested. UTF-8 encoded. |
void* VSIMalloc | ( | size_t | nSize | ) |
Analog of malloc().
Use VSIFree() to free
void* VSIMalloc2 | ( | size_t | nSize1, |
size_t | nSize2 | ||
) |
VSIMalloc2 allocates (nSize1 * nSize2) bytes.
In case of overflow of the multiplication, or if memory allocation fails, a NULL pointer is returned and a CE_Failure error is raised with CPLError(). If nSize1 == 0 || nSize2 == 0, a NULL pointer will also be returned. CPLFree() or VSIFree() can be used to free memory allocated by this function.
void* VSIMalloc3 | ( | size_t | nSize1, |
size_t | nSize2, | ||
size_t | nSize3 | ||
) |
VSIMalloc3 allocates (nSize1 * nSize2 * nSize3) bytes.
In case of overflow of the multiplication, or if memory allocation fails, a NULL pointer is returned and a CE_Failure error is raised with CPLError(). If nSize1 == 0 || nSize2 == 0 || nSize3 == 0, a NULL pointer will also be returned. CPLFree() or VSIFree() can be used to free memory allocated by this function.
void* VSIMallocAligned | ( | size_t | nAlignment, |
size_t | nSize | ||
) |
Allocates a buffer with an alignment constraint.
The return value must be freed with VSIFreeAligned().
nAlignment | Must be a power of 2, multiple of sizeof(void*), and lesser than 256. |
nSize | Size of the buffer to allocate. |
void* VSIMallocAlignedAuto | ( | size_t | nSize | ) |
Allocates a buffer with an alignment constraint such that it can be used by the most demanding vector instruction set on that platform.
The return value must be freed with VSIFreeAligned().
nSize | Size of the buffer to allocate. |
int VSIMkdir | ( | const char * | pszPathname, |
long | mode | ||
) |
Create a directory.
Create a new directory with the indicated mode. The mode is ignored on some platforms. A reasonable default mode value would be 0666. This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX mkdir() function.
pszPathname | the path to the directory to create. UTF-8 encoded. |
mode | the permissions mode. |
int VSIMkdirRecursive | ( | const char * | pszPathname, |
long | mode | ||
) |
Create a directory and all its ancestors.
pszPathname | the path to the directory to create. UTF-8 encoded. |
mode | the permissions mode. |
VSIDIR* VSIOpenDir | ( | const char * | pszPath, |
int | nRecurseDepth, | ||
const char *const * | papszOptions | ||
) |
Open a directory to read its entries.
This function is close to the POSIX opendir() function.
For /vsis3/, /vsigs/, /vsioss/ and /vsiaz/, this function has an efficient implementation, minimizing the number of network requests, when invoked with nRecurseDepth <= 0.
Entries are read by calling VSIGetNextDirEntry() on the handled returned by that function, until it returns NULL. VSICloseDir() must be called once done with the returned directory handle.
pszPath | the relative, or absolute path of a directory to read. UTF-8 encoded. |
nRecurseDepth | 0 means do not recurse in subdirectories, 1 means recurse only in the first level of subdirectories, etc. -1 means unlimited recursion level |
papszOptions | NULL terminated list of options, or NULL. |
char** VSIReadDir | ( | const char * | pszPath | ) |
Read names in a directory.
This function abstracts access to directory contains. It returns a list of strings containing the names of files, and directories in this directory. The resulting string list becomes the responsibility of the application and should be freed with CSLDestroy() when no longer needed.
Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.
This function used to be known as CPLReadDir(), but the old name is now deprecated.
pszPath | the relative, or absolute path of a directory to read. UTF-8 encoded. |
char** VSIReadDirEx | ( | const char * | pszPath, |
int | nMaxFiles | ||
) |
Read names in a directory.
This function abstracts access to directory contains. It returns a list of strings containing the names of files, and directories in this directory. The resulting string list becomes the responsibility of the application and should be freed with CSLDestroy() when no longer needed.
Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.
If nMaxFiles is set to a positive number, directory listing will stop after that limit has been reached. Note that to indicate truncate, at least one element more than the nMaxFiles limit will be returned. If CSLCount() on the result is lesser or equal to nMaxFiles, then no truncation occurred.
pszPath | the relative, or absolute path of a directory to read. UTF-8 encoded. |
nMaxFiles | maximum number of files after which to stop, or 0 for no limit. |
char** VSIReadDirRecursive | ( | const char * | pszPathIn | ) |
Read names in a directory recursively.
This function abstracts access to directory contents and subdirectories. It returns a list of strings containing the names of files and directories in this directory and all subdirectories. The resulting string list becomes the responsibility of the application and should be freed with CSLDestroy() when no longer needed.
Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.
pszPathIn | the relative, or absolute path of a directory to read. UTF-8 encoded. |
void* VSIRealloc | ( | void * | pData, |
size_t | nNewSize | ||
) |
Analog of realloc().
Use VSIFree() to free
int VSIRename | ( | const char * | oldpath, |
const char * | newpath | ||
) |
Rename a file.
Renames a file object in the file system. It should be possible to rename a file onto a new filesystem, but it is safest if this function is only used to rename files that remain in the same directory.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX rename() function.
oldpath | the name of the file to be renamed. UTF-8 encoded. |
newpath | the name the file should be given. UTF-8 encoded. |
void VSIRewindL | ( | VSILFILE * | fp | ) |
Rewind the file pointer to the beginning of the file.
This is equivalent to VSIFSeekL( fp, 0, SEEK_SET )
Analog of the POSIX rewind() call.
fp | file handle opened with VSIFOpenL(). |
int VSIRmdir | ( | const char * | pszDirname | ) |
Delete a directory.
Deletes a directory object from the file system. On some systems the directory must be empty before it can be deleted.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX rmdir() function.
pszDirname | the path of the directory to be deleted. UTF-8 encoded. |
int VSIRmdirRecursive | ( | const char * | pszDirname | ) |
Delete a directory recursively.
Deletes a directory object and its content from the file system.
void VSISetCryptKey | ( | const GByte * | pabyKey, |
int | nKeySize | ||
) |
Installs the encryption/decryption key.
By passing a NULL key, the previously installed key will be cleared. Note, however, that it is not guaranteed that there won't be trace of it in other places in memory or in on-disk temporary file.
pabyKey | key. Might be NULL to clear previously set key. |
nKeySize | length of the key in bytes. Might be 0 to clear previously set key. |
int VSIStatExL | ( | const char * | pszFilename, |
VSIStatBufL * | psStatBuf, | ||
int | nFlags | ||
) |
Get filesystem object info.
Fetches status information about a filesystem object (file, directory, etc). The returned information is placed in the VSIStatBufL structure. For portability, only use the st_size (size in bytes) and st_mode (file type). This method is similar to VSIStat(), but will work on large files on systems where this requires special calls.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX stat() function, with an extra parameter to specify which information is needed, which offers a potential for speed optimizations on specialized and potentially slow virtual filesystem objects (/vsigzip/, /vsicurl/)
pszFilename | the path of the filesystem object to be queried. UTF-8 encoded. |
psStatBuf | the structure to load with information. |
nFlags | 0 to get all information, or VSI_STAT_EXISTS_FLAG, VSI_STAT_NATURE_FLAG or VSI_STAT_SIZE_FLAG, or a combination of those to get partial info. |
int VSIStatL | ( | const char * | pszFilename, |
VSIStatBufL * | psStatBuf | ||
) |
Get filesystem object info.
Fetches status information about a filesystem object (file, directory, etc). The returned information is placed in the VSIStatBufL structure. For portability, only use the st_size (size in bytes) and st_mode (file type). This method is similar to VSIStat(), but will work on large files on systems where this requires special calls.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX stat() function.
pszFilename | the path of the filesystem object to be queried. UTF-8 encoded. |
psStatBuf | the structure to load with information. |
void VSIStdoutSetRedirection | ( | VSIWriteFunction | pFct, |
FILE * | stream | ||
) |
Set an alternative write function and output file handle instead of fwrite() / stdout.
pFct | Function with same signature as fwrite() |
stream | File handle on which to output. Passed to pFct. |
char* VSIStrdup | ( | const char * | pszString | ) |
Analog of strdup().
Use VSIFree() to free
char* VSIStrerror | ( | int | nErrno | ) |
Return the error string corresponding to the error number.
Do not free it
int VSISupportsSparseFiles | ( | const char * | pszPath | ) |
Returns if the filesystem supports sparse files.
Only supported on Linux (and no other Unix derivatives) and Windows. On Linux, the answer depends on a few hardcoded signatures for common filesystems. Other filesystems will be considered as not supporting sparse files.
pszPath | the path of the filesystem object to be tested. UTF-8 encoded. |
int VSISync | ( | const char * | pszSource, |
const char * | pszTarget, | ||
const char *const * | papszOptions, | ||
GDALProgressFunc | pProgressFunc, | ||
void * | pProgressData, | ||
char *** | ppapszOutputs | ||
) |
Synchronize a source file/directory with a target file/directory.
This is a analog of the 'rsync' utility. In the current implementation, rsync would be more efficient for local file copying, but VSISync() main interest is when the source or target is a remote file system like /vsis3/ or /vsigs/, in which case it can take into account the timestamps of the files (or optionally the ETag/MD5Sum) to avoid unneeded copy operations.
Note: currently only implemented efficiently for local filesystem <–> remote filesystem.
Similarly to rsync behaviour, if the source filename ends with a slash, it means that the content of the directory must be copied, but not the directory name. For example, assuming "/home/even/foo" contains a file "bar", VSISync("/home/even/foo/", "/mnt/media", ...) will create a "/mnt/media/bar" file. Whereas VSISync("/home/even/foo", "/mnt/media", ...) will create a "/mnt/media/foo" directory which contains a bar file.
pszSource | Source file or directory. UTF-8 encoded. |
pszTarget | Target file or direcotry. UTF-8 encoded. |
papszOptions | Null terminated list of options, or NULL. Currently accepted options are:
|
pProgressFunc | Progress callback, or NULL. |
pProgressData | User data of progress callback, or NULL. |
ppapszOutputs | Unused. Should be set to NULL for now. |
int VSIUnlink | ( | const char * | pszFilename | ) |
Delete a file.
Deletes a file object from the file system.
This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.
Analog of the POSIX unlink() function.
pszFilename | the path of the file to be deleted. UTF-8 encoded. |