EVOLUTION-MANAGER
Edit File: cpl__vsi_8h.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <meta name="generator" content="Doxygen 1.8.5"/> <title>SDTS_AL: cpl_vsi.h File Reference</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">SDTS_AL </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Generated by Doxygen 1.8.5 --> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="pages.html"><span>Related Pages</span></a></li> <li><a href="annotated.html"><span>Classes</span></a></li> <li class="current"><a href="files.html"><span>Files</span></a></li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>File List</span></a></li> <li><a href="globals.html"><span>File Members</span></a></li> </ul> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_651562d8bf6cfd3e81eff5b570d7df50.html">port</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#define-members">Macros</a> | <a href="#typedef-members">Typedefs</a> | <a href="#enum-members">Enumerations</a> | <a href="#func-members">Functions</a> </div> <div class="headertitle"> <div class="title">cpl_vsi.h File Reference</div> </div> </div><!--header--> <div class="contents"> <div class="textblock"><code>#include "<a class="el" href="cpl__port_8h_source.html">cpl_port.h</a>"</code><br/> <code>#include <unistd.h></code><br/> <code>#include <sys/stat.h></code><br/> </div> <p><a href="cpl__vsi_8h_source.html">Go to the source code of this file.</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="define-members"></a> Macros</h2></td></tr> <tr class="memitem:a7e5cdfef2e52acfa6c2d723934e0d796"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7e5cdfef2e52acfa6c2d723934e0d796">VSI_ISLNK</a>(x)   S_ISLNK(x)</td></tr> <tr class="separator:a7e5cdfef2e52acfa6c2d723934e0d796"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a57c4561cb89d1e6d0273c5be2a374777"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a57c4561cb89d1e6d0273c5be2a374777">VSI_ISREG</a>(x)   S_ISREG(x)</td></tr> <tr class="separator:a57c4561cb89d1e6d0273c5be2a374777"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a13e9ada3d2bb3df2eae358b1037f9a1b"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a13e9ada3d2bb3df2eae358b1037f9a1b">VSI_ISDIR</a>(x)   S_ISDIR(x)</td></tr> <tr class="separator:a13e9ada3d2bb3df2eae358b1037f9a1b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a20bb0e8c2fc561600efe533babb577aa"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a20bb0e8c2fc561600efe533babb577aa">VSI_L_OFFSET_MAX</a>   <a class="el" href="cpl__port_8h.html#a82bd4992c0362d8addec634ec7d213b8">GUINTBIG_MAX</a></td></tr> <tr class="separator:a20bb0e8c2fc561600efe533babb577aa"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3e3fb3d4a5abff8b360d7b7941397503"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a3e3fb3d4a5abff8b360d7b7941397503">VSI_STAT_EXISTS_FLAG</a>   0x1</td></tr> <tr class="separator:a3e3fb3d4a5abff8b360d7b7941397503"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae67c44d6a3cae38b33d4b4b6bfb02131"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ae67c44d6a3cae38b33d4b4b6bfb02131">VSI_STAT_NATURE_FLAG</a>   0x2</td></tr> <tr class="separator:ae67c44d6a3cae38b33d4b4b6bfb02131"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac4465858df54d216dbade556b08a5d4d"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac4465858df54d216dbade556b08a5d4d">VSI_STAT_SIZE_FLAG</a>   0x4</td></tr> <tr class="separator:ac4465858df54d216dbade556b08a5d4d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0c624636d6673f91667e8460417495e0"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a0c624636d6673f91667e8460417495e0">VSI_STAT_SET_ERROR_FLAG</a>   0x8</td></tr> <tr class="separator:a0c624636d6673f91667e8460417495e0"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7ab86f661220e57cd07d7bc6818183e1"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7ab86f661220e57cd07d7bc6818183e1">VSI_MALLOC_ALIGNED_AUTO_VERBOSE</a>(size)   <a class="el" href="cpl__vsi_8h.html#a7209c01ef16a71a3f66ce5fd7059452d">VSIMallocAlignedAutoVerbose</a>(size,__FILE__,__LINE__)</td></tr> <tr class="separator:a7ab86f661220e57cd07d7bc6818183e1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aade5a8741eb3362f68b2c3ee2d1b3676"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#aade5a8741eb3362f68b2c3ee2d1b3676">VSI_MALLOC_VERBOSE</a>(size)   <a class="el" href="cpl__vsi_8h.html#a281e545fcd4bb3973697eef42c47d2da">VSIMallocVerbose</a>(size,__FILE__,__LINE__)</td></tr> <tr class="separator:aade5a8741eb3362f68b2c3ee2d1b3676"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac85b87a2d19d51f10ecce10d4ba53570"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac85b87a2d19d51f10ecce10d4ba53570">VSI_MALLOC2_VERBOSE</a>(nSize1, nSize2)   <a class="el" href="cpl__vsi_8h.html#a8fec5f50fa0aa5a41480d15b650e8aeb">VSIMalloc2Verbose</a>(nSize1,nSize2,__FILE__,__LINE__)</td></tr> <tr class="separator:ac85b87a2d19d51f10ecce10d4ba53570"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7325cdd9f33067256f91301e84b96fa1"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7325cdd9f33067256f91301e84b96fa1">VSI_MALLOC3_VERBOSE</a>(nSize1, nSize2, nSize3)   <a class="el" href="cpl__vsi_8h.html#acc60cbb0f8ce0e17d2a45b42176a87ca">VSIMalloc3Verbose</a>(nSize1,nSize2,nSize3,__FILE__,__LINE__)</td></tr> <tr class="separator:a7325cdd9f33067256f91301e84b96fa1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a0ef6b56ece448880c45976dab915c89c"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a0ef6b56ece448880c45976dab915c89c">VSI_CALLOC_VERBOSE</a>(nCount, nSize)   <a class="el" href="cpl__vsi_8h.html#a7f624597e680ca5c73db210dcd187cbb">VSICallocVerbose</a>(nCount,nSize,__FILE__,__LINE__)</td></tr> <tr class="separator:a0ef6b56ece448880c45976dab915c89c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a17f5ad7c5273fadcb66a4410f18fe0b4"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a17f5ad7c5273fadcb66a4410f18fe0b4">VSI_REALLOC_VERBOSE</a>(pOldPtr, nNewSize)   <a class="el" href="cpl__vsi_8h.html#ac1afd07c9001a14289f6b8321f326a9d">VSIReallocVerbose</a>(pOldPtr,nNewSize,__FILE__,__LINE__)</td></tr> <tr class="separator:a17f5ad7c5273fadcb66a4410f18fe0b4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad5909c421c6d6bd385f6b702a9e7c693"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ad5909c421c6d6bd385f6b702a9e7c693">VSI_STRDUP_VERBOSE</a>(pszStr)   <a class="el" href="cpl__vsi_8h.html#ae83d0502dfd42886ef51d9879f484596">VSIStrdupVerbose</a>(pszStr,__FILE__,__LINE__)</td></tr> <tr class="separator:ad5909c421c6d6bd385f6b702a9e7c693"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:afdc1dc07ba4fe31933c9b522de783692"><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#afdc1dc07ba4fe31933c9b522de783692">CPLReadDir</a>   <a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3">VSIReadDir</a></td></tr> <tr class="separator:afdc1dc07ba4fe31933c9b522de783692"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="typedef-members"></a> Typedefs</h2></td></tr> <tr class="memitem:af56f9ebab1994e4c2ed3f0a50af787b2"><td class="memItemLeft" align="right" valign="top">typedef <a class="el" href="cpl__port_8h.html#a4f0794a0fb78d55ba284a414191dbc93">GUIntBig</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a></td></tr> <tr class="separator:af56f9ebab1994e4c2ed3f0a50af787b2"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af1b1400e402360b38304de2b13d16c14"><td class="memItemLeft" align="right" valign="top">typedef FILE </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a></td></tr> <tr class="separator:af1b1400e402360b38304de2b13d16c14"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:accc7d5e1f7745ec91b5e32654870e324"><td class="memItemLeft" align="right" valign="top">typedef struct VSI_STAT64_T </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a></td></tr> <tr class="separator:accc7d5e1f7745ec91b5e32654870e324"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3c515f8c3214663069ead6f3b358b161"><td class="memItemLeft" align="right" valign="top">typedef size_t(* </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a3c515f8c3214663069ead6f3b358b161">VSIWriteFunction</a> )(const void *ptr, size_t size, size_t nmemb, FILE *stream)</td></tr> <tr class="separator:a3c515f8c3214663069ead6f3b358b161"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="enum-members"></a> Enumerations</h2></td></tr> <tr class="memitem:a2aa5b80209e71d81a118d647c6a9be66"><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66">VSIRangeStatus</a> { <a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66a68ea00493f4c073e19da9613d1d3d630">VSI_RANGE_STATUS_UNKNOWN</a>, <a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66a20f1d70259ba20c9c8767fed7b0a7119">VSI_RANGE_STATUS_DATA</a>, <a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66a4518228a517000ca00f132bc67ac6dc7">VSI_RANGE_STATUS_HOLE</a> }</td></tr> <tr class="separator:a2aa5b80209e71d81a118d647c6a9be66"><td class="memSeparator" colspan="2"> </td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a> Functions</h2></td></tr> <tr class="memitem:a8cd4933a84fe46b00733ecae85dd75f4"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4">VSIFOpenL</a> (const char *, const char *) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a8cd4933a84fe46b00733ecae85dd75f4"><td class="mdescLeft"> </td><td class="mdescRight">Open file. <a href="#a8cd4933a84fe46b00733ecae85dd75f4">More...</a><br/></td></tr> <tr class="separator:a8cd4933a84fe46b00733ecae85dd75f4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a21789b8264a68f3d68653ba1844f654c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a21789b8264a68f3d68653ba1844f654c">VSIFOpenExL</a> (const char *, const char *, int) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a21789b8264a68f3d68653ba1844f654c"><td class="mdescLeft"> </td><td class="mdescRight">Open file. <a href="#a21789b8264a68f3d68653ba1844f654c">More...</a><br/></td></tr> <tr class="separator:a21789b8264a68f3d68653ba1844f654c"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa6dfbf71cb85c09cb4906371ec3eb4d9"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#aa6dfbf71cb85c09cb4906371ec3eb4d9">VSIFCloseL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:aa6dfbf71cb85c09cb4906371ec3eb4d9"><td class="mdescLeft"> </td><td class="mdescRight">Close file. <a href="#aa6dfbf71cb85c09cb4906371ec3eb4d9">More...</a><br/></td></tr> <tr class="separator:aa6dfbf71cb85c09cb4906371ec3eb4d9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac4395f975a5bcf5365c2485e33f3bb85"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac4395f975a5bcf5365c2485e33f3bb85">VSIFSeekL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a>, int) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:ac4395f975a5bcf5365c2485e33f3bb85"><td class="mdescLeft"> </td><td class="mdescRight">Seek to requested offset. <a href="#ac4395f975a5bcf5365c2485e33f3bb85">More...</a><br/></td></tr> <tr class="separator:ac4395f975a5bcf5365c2485e33f3bb85"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a08012a251ac95dc29162dfa4f488f784"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a08012a251ac95dc29162dfa4f488f784">VSIFTellL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a08012a251ac95dc29162dfa4f488f784"><td class="mdescLeft"> </td><td class="mdescRight">Tell current file offset. <a href="#a08012a251ac95dc29162dfa4f488f784">More...</a><br/></td></tr> <tr class="separator:a08012a251ac95dc29162dfa4f488f784"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae4f5da1efca20f5be3c9c13fd8055621"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ae4f5da1efca20f5be3c9c13fd8055621">VSIRewindL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *)</td></tr> <tr class="memdesc:ae4f5da1efca20f5be3c9c13fd8055621"><td class="mdescLeft"> </td><td class="mdescRight">Rewind the file pointer to the beginning of the file. <a href="#ae4f5da1efca20f5be3c9c13fd8055621">More...</a><br/></td></tr> <tr class="separator:ae4f5da1efca20f5be3c9c13fd8055621"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a88da01d6d8b668a573cdf9a9a1c661c5"><td class="memItemLeft" align="right" valign="top">size_t CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a88da01d6d8b668a573cdf9a9a1c661c5">VSIFReadL</a> (void *, size_t, size_t, <a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a88da01d6d8b668a573cdf9a9a1c661c5"><td class="mdescLeft"> </td><td class="mdescRight">Read bytes from file. <a href="#a88da01d6d8b668a573cdf9a9a1c661c5">More...</a><br/></td></tr> <tr class="separator:a88da01d6d8b668a573cdf9a9a1c661c5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a453f5c85d57ec5416cba426271d3b7f4"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a453f5c85d57ec5416cba426271d3b7f4">VSIFReadMultiRangeL</a> (int nRanges, void **ppData, const <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> *panOffsets, const size_t *panSizes, <a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a453f5c85d57ec5416cba426271d3b7f4"><td class="mdescLeft"> </td><td class="mdescRight">Read several ranges of bytes from file. <a href="#a453f5c85d57ec5416cba426271d3b7f4">More...</a><br/></td></tr> <tr class="separator:a453f5c85d57ec5416cba426271d3b7f4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a32de2fda38b71bf682e675fb996b4b11"><td class="memItemLeft" align="right" valign="top">size_t CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a32de2fda38b71bf682e675fb996b4b11">VSIFWriteL</a> (const void *, size_t, size_t, <a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a32de2fda38b71bf682e675fb996b4b11"><td class="mdescLeft"> </td><td class="mdescRight">Write bytes to file. <a href="#a32de2fda38b71bf682e675fb996b4b11">More...</a><br/></td></tr> <tr class="separator:a32de2fda38b71bf682e675fb996b4b11"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a34eabf7ad5a8f9dd17a651c757f3a285"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a34eabf7ad5a8f9dd17a651c757f3a285">VSIFEofL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a34eabf7ad5a8f9dd17a651c757f3a285"><td class="mdescLeft"> </td><td class="mdescRight">Test for end of file. <a href="#a34eabf7ad5a8f9dd17a651c757f3a285">More...</a><br/></td></tr> <tr class="separator:a34eabf7ad5a8f9dd17a651c757f3a285"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ab7c9e557dff7cf49864ecba10209da5d"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ab7c9e557dff7cf49864ecba10209da5d">VSIFTruncateL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a>) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:ab7c9e557dff7cf49864ecba10209da5d"><td class="mdescLeft"> </td><td class="mdescRight">Truncate/expand the file to the specified size. <a href="#ab7c9e557dff7cf49864ecba10209da5d">More...</a><br/></td></tr> <tr class="separator:ab7c9e557dff7cf49864ecba10209da5d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4db3ac34d0c757ceed322999395e5783"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a4db3ac34d0c757ceed322999395e5783">VSIFFlushL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a4db3ac34d0c757ceed322999395e5783"><td class="mdescLeft"> </td><td class="mdescRight">Flush pending writes to disk. <a href="#a4db3ac34d0c757ceed322999395e5783">More...</a><br/></td></tr> <tr class="separator:a4db3ac34d0c757ceed322999395e5783"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6697f986f76f51433939a3834a050e20"><td class="memItemLeft" align="right" valign="top">int CPL_DLL int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a6697f986f76f51433939a3834a050e20">VSIFPutcL</a> (int, <a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *) EXPERIMENTAL_CPL_WARN_UNUSED_RESULT</td></tr> <tr class="memdesc:a6697f986f76f51433939a3834a050e20"><td class="mdescLeft"> </td><td class="mdescRight">Write a single byte to the file. <a href="#a6697f986f76f51433939a3834a050e20">More...</a><br/></td></tr> <tr class="separator:a6697f986f76f51433939a3834a050e20"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5e283e7d0a87882041f4116432667f54"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66">VSIRangeStatus</a> CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a5e283e7d0a87882041f4116432667f54">VSIFGetRangeStatusL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *fp, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> nStart, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> nLength)</td></tr> <tr class="memdesc:a5e283e7d0a87882041f4116432667f54"><td class="mdescLeft"> </td><td class="mdescRight">Return if a given file range contains data or holes filled with zeroes. <a href="#a5e283e7d0a87882041f4116432667f54">More...</a><br/></td></tr> <tr class="separator:a5e283e7d0a87882041f4116432667f54"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a004f7a75de82875ddb022408ab1811a5"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a004f7a75de82875ddb022408ab1811a5">VSIIngestFile</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *fp, const char *pszFilename, <a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> **ppabyRet, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> *pnSize, <a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> nMaxSize) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a004f7a75de82875ddb022408ab1811a5"><td class="mdescLeft"> </td><td class="mdescRight">Ingest a file into memory. <a href="#a004f7a75de82875ddb022408ab1811a5">More...</a><br/></td></tr> <tr class="separator:a004f7a75de82875ddb022408ab1811a5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac51b6905fb2c5324690a8d2c0e527810"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac51b6905fb2c5324690a8d2c0e527810">VSIStatL</a> (const char *, <a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a> *) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:ac51b6905fb2c5324690a8d2c0e527810"><td class="mdescLeft"> </td><td class="mdescRight">Get filesystem object info. <a href="#ac51b6905fb2c5324690a8d2c0e527810">More...</a><br/></td></tr> <tr class="separator:ac51b6905fb2c5324690a8d2c0e527810"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a1fd6837a767e13c0618428ee8f020d93"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a1fd6837a767e13c0618428ee8f020d93">VSIStatExL</a> (const char *pszFilename, <a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a> *psStatBuf, int nFlags) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a1fd6837a767e13c0618428ee8f020d93"><td class="mdescLeft"> </td><td class="mdescRight">Get filesystem object info. <a href="#a1fd6837a767e13c0618428ee8f020d93">More...</a><br/></td></tr> <tr class="separator:a1fd6837a767e13c0618428ee8f020d93"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a749860de0b1a6880091d3eac733ba785"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a749860de0b1a6880091d3eac733ba785">VSIIsCaseSensitiveFS</a> (const char *pszFilename)</td></tr> <tr class="memdesc:a749860de0b1a6880091d3eac733ba785"><td class="mdescLeft"> </td><td class="mdescRight">Returns if the filenames of the filesystem are case sensitive. <a href="#a749860de0b1a6880091d3eac733ba785">More...</a><br/></td></tr> <tr class="separator:a749860de0b1a6880091d3eac733ba785"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac7a5fe244f1aa855275d2103ccc65f52"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac7a5fe244f1aa855275d2103ccc65f52">VSISupportsSparseFiles</a> (const char *pszPath)</td></tr> <tr class="memdesc:ac7a5fe244f1aa855275d2103ccc65f52"><td class="mdescLeft"> </td><td class="mdescRight">Returns if the filesystem supports sparse files. <a href="#ac7a5fe244f1aa855275d2103ccc65f52">More...</a><br/></td></tr> <tr class="separator:ac7a5fe244f1aa855275d2103ccc65f52"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a19dbdf7c1c2bc7c3bc40932207b6e587"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a19dbdf7c1c2bc7c3bc40932207b6e587">VSIHasOptimizedReadMultiRange</a> (const char *pszPath)</td></tr> <tr class="memdesc:a19dbdf7c1c2bc7c3bc40932207b6e587"><td class="mdescLeft"> </td><td class="mdescRight">Returns if the filesystem supports efficient multi-range reading. <a href="#a19dbdf7c1c2bc7c3bc40932207b6e587">More...</a><br/></td></tr> <tr class="separator:a19dbdf7c1c2bc7c3bc40932207b6e587"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9ce1f198880c92e23b58ded7fe47807a"><td class="memItemLeft" align="right" valign="top">const char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a9ce1f198880c92e23b58ded7fe47807a">VSIGetActualURL</a> (const char *pszFilename)</td></tr> <tr class="memdesc:a9ce1f198880c92e23b58ded7fe47807a"><td class="mdescLeft"> </td><td class="mdescRight">Returns the actual URL of a supplied filename. <a href="#a9ce1f198880c92e23b58ded7fe47807a">More...</a><br/></td></tr> <tr class="separator:a9ce1f198880c92e23b58ded7fe47807a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a551673db737f6e820785fdd535722a4a"><td class="memItemLeft" align="right" valign="top">char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a551673db737f6e820785fdd535722a4a">VSIGetSignedURL</a> (const char *pszFilename, <a class="el" href="cpl__port_8h.html#ad6399986f130f30db93917dd65434a06">CSLConstList</a> papszOptions)</td></tr> <tr class="memdesc:a551673db737f6e820785fdd535722a4a"><td class="mdescLeft"> </td><td class="mdescRight">Returns a signed URL of a supplied filename. <a href="#a551673db737f6e820785fdd535722a4a">More...</a><br/></td></tr> <tr class="separator:a551673db737f6e820785fdd535722a4a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad66e870a2d86f48f2523f029eac5ce42"><td class="memItemLeft" align="right" valign="top">const char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ad66e870a2d86f48f2523f029eac5ce42">VSIGetFileSystemOptions</a> (const char *pszFilename)</td></tr> <tr class="memdesc:ad66e870a2d86f48f2523f029eac5ce42"><td class="mdescLeft"> </td><td class="mdescRight">Return the list of options associated with a virtual file system handler as a serialized XML string. <a href="#ad66e870a2d86f48f2523f029eac5ce42">More...</a><br/></td></tr> <tr class="separator:ad66e870a2d86f48f2523f029eac5ce42"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a82685bb16e1682a8296291fa523d0611"><td class="memItemLeft" align="right" valign="top">char CPL_DLL ** </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a82685bb16e1682a8296291fa523d0611">VSIGetFileSystemsPrefixes</a> (void)</td></tr> <tr class="memdesc:a82685bb16e1682a8296291fa523d0611"><td class="mdescLeft"> </td><td class="mdescRight">Return the list of prefixes for virtual file system handlers currently registered. <a href="#a82685bb16e1682a8296291fa523d0611">More...</a><br/></td></tr> <tr class="separator:a82685bb16e1682a8296291fa523d0611"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae62237db0d3a71a72f7ceb8c2e1886cc"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ae62237db0d3a71a72f7ceb8c2e1886cc">VSIFGetNativeFileDescriptorL</a> (<a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> *)</td></tr> <tr class="memdesc:ae62237db0d3a71a72f7ceb8c2e1886cc"><td class="mdescLeft"> </td><td class="mdescRight">Returns the "native" file descriptor for the virtual handle. <a href="#ae62237db0d3a71a72f7ceb8c2e1886cc">More...</a><br/></td></tr> <tr class="separator:ae62237db0d3a71a72f7ceb8c2e1886cc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6197a01f4678227cf9e9ba73d1c97c6e"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a6197a01f4678227cf9e9ba73d1c97c6e">VSICalloc</a> (size_t, size_t) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a6197a01f4678227cf9e9ba73d1c97c6e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a4aff24ea5596ad5451f87435518cc5a9"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a4aff24ea5596ad5451f87435518cc5a9">VSIMalloc</a> (size_t) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a4aff24ea5596ad5451f87435518cc5a9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac2f40ec7c0b1b2fd99a521973f015ea1"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree</a> (void *)</td></tr> <tr class="separator:ac2f40ec7c0b1b2fd99a521973f015ea1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:aa4b48d9ac65a9336f48062de9fcf5da6"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#aa4b48d9ac65a9336f48062de9fcf5da6">VSIRealloc</a> (void *, size_t) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:aa4b48d9ac65a9336f48062de9fcf5da6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a83a7abe4b127d0b39db748255e9fed64"><td class="memItemLeft" align="right" valign="top">char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a83a7abe4b127d0b39db748255e9fed64">VSIStrdup</a> (const char *) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a83a7abe4b127d0b39db748255e9fed64"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a63230ddc33aef1d7c0bc2e2ce964e8ed"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a63230ddc33aef1d7c0bc2e2ce964e8ed">VSIMallocAligned</a> (size_t nAlignment, size_t nSize) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a63230ddc33aef1d7c0bc2e2ce964e8ed"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af2e532c323e8398bf9d6483fe1d89d51"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#af2e532c323e8398bf9d6483fe1d89d51">VSIMallocAlignedAuto</a> (size_t nSize) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:af2e532c323e8398bf9d6483fe1d89d51"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2ad4a6e290dc990fb4f177740f02dccc"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a2ad4a6e290dc990fb4f177740f02dccc">VSIFreeAligned</a> (void *ptr)</td></tr> <tr class="separator:a2ad4a6e290dc990fb4f177740f02dccc"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7209c01ef16a71a3f66ce5fd7059452d"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7209c01ef16a71a3f66ce5fd7059452d">VSIMallocAlignedAutoVerbose</a> (size_t nSize, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a7209c01ef16a71a3f66ce5fd7059452d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6a7d404a07c9821427be6f34fef64a48"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a6a7d404a07c9821427be6f34fef64a48">VSIMalloc2</a> (size_t nSize1, size_t nSize2) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a6a7d404a07c9821427be6f34fef64a48"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae465e950b6417048e4196eb7039eadc5"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ae465e950b6417048e4196eb7039eadc5">VSIMalloc3</a> (size_t nSize1, size_t nSize2, size_t nSize3) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:ae465e950b6417048e4196eb7039eadc5"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a281e545fcd4bb3973697eef42c47d2da"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a281e545fcd4bb3973697eef42c47d2da">VSIMallocVerbose</a> (size_t nSize, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a281e545fcd4bb3973697eef42c47d2da"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8fec5f50fa0aa5a41480d15b650e8aeb"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a8fec5f50fa0aa5a41480d15b650e8aeb">VSIMalloc2Verbose</a> (size_t nSize1, size_t nSize2, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a8fec5f50fa0aa5a41480d15b650e8aeb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:acc60cbb0f8ce0e17d2a45b42176a87ca"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#acc60cbb0f8ce0e17d2a45b42176a87ca">VSIMalloc3Verbose</a> (size_t nSize1, size_t nSize2, size_t nSize3, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:acc60cbb0f8ce0e17d2a45b42176a87ca"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7f624597e680ca5c73db210dcd187cbb"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7f624597e680ca5c73db210dcd187cbb">VSICallocVerbose</a> (size_t nCount, size_t nSize, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:a7f624597e680ca5c73db210dcd187cbb"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ac1afd07c9001a14289f6b8321f326a9d"><td class="memItemLeft" align="right" valign="top">void CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ac1afd07c9001a14289f6b8321f326a9d">VSIReallocVerbose</a> (void *pOldPtr, size_t nNewSize, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:ac1afd07c9001a14289f6b8321f326a9d"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ae83d0502dfd42886ef51d9879f484596"><td class="memItemLeft" align="right" valign="top">char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ae83d0502dfd42886ef51d9879f484596">VSIStrdupVerbose</a> (const char *pszStr, const char *pszFile, int nLine) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="separator:ae83d0502dfd42886ef51d9879f484596"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ada199e0a1767d83b2a1190a06352a967"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ada199e0a1767d83b2a1190a06352a967">CPLGetPhysicalRAM</a> (void)</td></tr> <tr class="separator:ada199e0a1767d83b2a1190a06352a967"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a832811eed05c55ad07abd6aa266c9856"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a832811eed05c55ad07abd6aa266c9856">CPLGetUsablePhysicalRAM</a> (void)</td></tr> <tr class="separator:a832811eed05c55ad07abd6aa266c9856"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abf9b6aa2f0038d4c4072a71befb510a3"><td class="memItemLeft" align="right" valign="top">char CPL_DLL ** </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3">VSIReadDir</a> (const char *)</td></tr> <tr class="memdesc:abf9b6aa2f0038d4c4072a71befb510a3"><td class="mdescLeft"> </td><td class="mdescRight">Read names in a directory. <a href="#abf9b6aa2f0038d4c4072a71befb510a3">More...</a><br/></td></tr> <tr class="separator:abf9b6aa2f0038d4c4072a71befb510a3"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2820f15ddbb82cc6372ea6e0f3d97c90"><td class="memItemLeft" align="right" valign="top">char CPL_DLL ** </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a2820f15ddbb82cc6372ea6e0f3d97c90">VSIReadDirRecursive</a> (const char *pszPath)</td></tr> <tr class="memdesc:a2820f15ddbb82cc6372ea6e0f3d97c90"><td class="mdescLeft"> </td><td class="mdescRight">Read names in a directory recursively. <a href="#a2820f15ddbb82cc6372ea6e0f3d97c90">More...</a><br/></td></tr> <tr class="separator:a2820f15ddbb82cc6372ea6e0f3d97c90"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7fdce75f1dbaa736ff4c903eff1fcf0f"><td class="memItemLeft" align="right" valign="top">char CPL_DLL ** </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7fdce75f1dbaa736ff4c903eff1fcf0f">VSIReadDirEx</a> (const char *pszPath, int nMaxFiles)</td></tr> <tr class="memdesc:a7fdce75f1dbaa736ff4c903eff1fcf0f"><td class="mdescLeft"> </td><td class="mdescRight">Read names in a directory. <a href="#a7fdce75f1dbaa736ff4c903eff1fcf0f">More...</a><br/></td></tr> <tr class="separator:a7fdce75f1dbaa736ff4c903eff1fcf0f"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:af7f1fa9ce0cf7e2869d7e9b0e8a571a6"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#af7f1fa9ce0cf7e2869d7e9b0e8a571a6">VSIMkdir</a> (const char *pszPathname, long mode)</td></tr> <tr class="memdesc:af7f1fa9ce0cf7e2869d7e9b0e8a571a6"><td class="mdescLeft"> </td><td class="mdescRight">Create a directory. <a href="#af7f1fa9ce0cf7e2869d7e9b0e8a571a6">More...</a><br/></td></tr> <tr class="separator:af7f1fa9ce0cf7e2869d7e9b0e8a571a6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad9fb526a7fc44b62abd0fa3c5b523db9"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ad9fb526a7fc44b62abd0fa3c5b523db9">VSIMkdirRecursive</a> (const char *pszPathname, long mode)</td></tr> <tr class="memdesc:ad9fb526a7fc44b62abd0fa3c5b523db9"><td class="mdescLeft"> </td><td class="mdescRight">Create a directory and all its ancestors. <a href="#ad9fb526a7fc44b62abd0fa3c5b523db9">More...</a><br/></td></tr> <tr class="separator:ad9fb526a7fc44b62abd0fa3c5b523db9"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a62db6412245d2ce07f94dd15771c54f6"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a62db6412245d2ce07f94dd15771c54f6">VSIRmdir</a> (const char *pszDirname)</td></tr> <tr class="memdesc:a62db6412245d2ce07f94dd15771c54f6"><td class="mdescLeft"> </td><td class="mdescRight">Delete a directory. <a href="#a62db6412245d2ce07f94dd15771c54f6">More...</a><br/></td></tr> <tr class="separator:a62db6412245d2ce07f94dd15771c54f6"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a98dd1bf97fd95f42bac0aaf92de3defa"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a98dd1bf97fd95f42bac0aaf92de3defa">VSIRmdirRecursive</a> (const char *pszDirname)</td></tr> <tr class="memdesc:a98dd1bf97fd95f42bac0aaf92de3defa"><td class="mdescLeft"> </td><td class="mdescRight">Delete a directory recursively. <a href="#a98dd1bf97fd95f42bac0aaf92de3defa">More...</a><br/></td></tr> <tr class="separator:a98dd1bf97fd95f42bac0aaf92de3defa"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:abcf457f602620ffdf186b93b5ffbd9b4"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#abcf457f602620ffdf186b93b5ffbd9b4">VSIUnlink</a> (const char *pszFilename)</td></tr> <tr class="memdesc:abcf457f602620ffdf186b93b5ffbd9b4"><td class="mdescLeft"> </td><td class="mdescRight">Delete a file. <a href="#abcf457f602620ffdf186b93b5ffbd9b4">More...</a><br/></td></tr> <tr class="separator:abcf457f602620ffdf186b93b5ffbd9b4"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a7a08ebbeec3cc5516eb174239bd7de9e"><td class="memItemLeft" align="right" valign="top">int CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a7a08ebbeec3cc5516eb174239bd7de9e">VSIRename</a> (const char *oldpath, const char *newpath)</td></tr> <tr class="memdesc:a7a08ebbeec3cc5516eb174239bd7de9e"><td class="mdescLeft"> </td><td class="mdescRight">Rename a file. <a href="#a7a08ebbeec3cc5516eb174239bd7de9e">More...</a><br/></td></tr> <tr class="separator:a7a08ebbeec3cc5516eb174239bd7de9e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a63892837e77116dcd905f66daf5f64f1"><td class="memItemLeft" align="right" valign="top">char CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a63892837e77116dcd905f66daf5f64f1">VSIStrerror</a> (int)</td></tr> <tr class="separator:a63892837e77116dcd905f66daf5f64f1"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a870017a139f9950ee2b11db4ddafe275"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a870017a139f9950ee2b11db4ddafe275">VSIGetDiskFreeSpace</a> (const char *pszDirname)</td></tr> <tr class="memdesc:a870017a139f9950ee2b11db4ddafe275"><td class="mdescLeft"> </td><td class="mdescRight">Return free disk space available on the filesystem. <a href="#a870017a139f9950ee2b11db4ddafe275">More...</a><br/></td></tr> <tr class="separator:a870017a139f9950ee2b11db4ddafe275"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a6e22cbbc06008a40b0fcd052f596930b"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a6e22cbbc06008a40b0fcd052f596930b">VSIInstallMemFileHandler</a> (void)</td></tr> <tr class="memdesc:a6e22cbbc06008a40b0fcd052f596930b"><td class="mdescLeft"> </td><td class="mdescRight">Install "memory" file system handler. <a href="#a6e22cbbc06008a40b0fcd052f596930b">More...</a><br/></td></tr> <tr class="separator:a6e22cbbc06008a40b0fcd052f596930b"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a5e8e5d214b6b04b0665d394fb2abdb48"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a5e8e5d214b6b04b0665d394fb2abdb48">VSIInstallSubFileHandler</a> (void)</td></tr> <tr class="separator:a5e8e5d214b6b04b0665d394fb2abdb48"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3cde09f204df6f417653b7af4761178e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a3cde09f204df6f417653b7af4761178e">VSIInstallGZipFileHandler</a> (void)</td></tr> <tr class="memdesc:a3cde09f204df6f417653b7af4761178e"><td class="mdescLeft"> </td><td class="mdescRight">Install GZip file system handler. <a href="#a3cde09f204df6f417653b7af4761178e">More...</a><br/></td></tr> <tr class="separator:a3cde09f204df6f417653b7af4761178e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a884fac3cd6be2c09deb807e959d78b3a"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a884fac3cd6be2c09deb807e959d78b3a">VSIInstallZipFileHandler</a> (void)</td></tr> <tr class="memdesc:a884fac3cd6be2c09deb807e959d78b3a"><td class="mdescLeft"> </td><td class="mdescRight">Install ZIP file system handler. <a href="#a884fac3cd6be2c09deb807e959d78b3a">More...</a><br/></td></tr> <tr class="separator:a884fac3cd6be2c09deb807e959d78b3a"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a2c6b408477f59b40f0aec51d5980eb8e"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a2c6b408477f59b40f0aec51d5980eb8e">VSIInstallStdinHandler</a> (void)</td></tr> <tr class="memdesc:a2c6b408477f59b40f0aec51d5980eb8e"><td class="mdescLeft"> </td><td class="mdescRight">Install /vsistdin/ file system handler. <a href="#a2c6b408477f59b40f0aec51d5980eb8e">More...</a><br/></td></tr> <tr class="separator:a2c6b408477f59b40f0aec51d5980eb8e"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a61d2250ab2b22ca79b051a8479ee5383"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a61d2250ab2b22ca79b051a8479ee5383">VSIInstallStdoutHandler</a> (void)</td></tr> <tr class="memdesc:a61d2250ab2b22ca79b051a8479ee5383"><td class="mdescLeft"> </td><td class="mdescRight">Install /vsistdout/ file system handler. <a href="#a61d2250ab2b22ca79b051a8479ee5383">More...</a><br/></td></tr> <tr class="separator:a61d2250ab2b22ca79b051a8479ee5383"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a3b48f4df3e5c74f307307023a21f2bfa"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a3b48f4df3e5c74f307307023a21f2bfa">VSIInstallSparseFileHandler</a> (void)</td></tr> <tr class="separator:a3b48f4df3e5c74f307307023a21f2bfa"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:ad6dd983338849e7da4eaa88f6458ab64"><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#ad6dd983338849e7da4eaa88f6458ab64">VSIInstallTarFileHandler</a> (void)</td></tr> <tr class="memdesc:ad6dd983338849e7da4eaa88f6458ab64"><td class="mdescLeft"> </td><td class="mdescRight">Install /vsitar/ file system handler. <a href="#ad6dd983338849e7da4eaa88f6458ab64">More...</a><br/></td></tr> <tr class="separator:ad6dd983338849e7da4eaa88f6458ab64"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a8c1f65159790f3def58131f0218ac768"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a8c1f65159790f3def58131f0218ac768">VSIFileFromMemBuffer</a> (const char *pszFilename, <a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> *pabyData, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> nDataLength, int bTakeOwnership) <a class="el" href="cpl__port_8h.html#ac015c5d4ac53d3403979d81ab9d5e94f">CPL_WARN_UNUSED_RESULT</a></td></tr> <tr class="memdesc:a8c1f65159790f3def58131f0218ac768"><td class="mdescLeft"> </td><td class="mdescRight">Create memory "file" from a buffer. <a href="#a8c1f65159790f3def58131f0218ac768">More...</a><br/></td></tr> <tr class="separator:a8c1f65159790f3def58131f0218ac768"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a168515eb7370b6beff2a7888cec92970"><td class="memItemLeft" align="right" valign="top"><a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> CPL_DLL * </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a168515eb7370b6beff2a7888cec92970">VSIGetMemFileBuffer</a> (const char *pszFilename, <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> *pnDataLength, int bUnlinkAndSeize)</td></tr> <tr class="memdesc:a168515eb7370b6beff2a7888cec92970"><td class="mdescLeft"> </td><td class="mdescRight">Fetch buffer underlying memory file. <a href="#a168515eb7370b6beff2a7888cec92970">More...</a><br/></td></tr> <tr class="separator:a168515eb7370b6beff2a7888cec92970"><td class="memSeparator" colspan="2"> </td></tr> <tr class="memitem:a9dd85bb810de58ec3a381655809371ff"><td class="memItemLeft" align="right" valign="top">void CPL_DLL </td><td class="memItemRight" valign="bottom"><a class="el" href="cpl__vsi_8h.html#a9dd85bb810de58ec3a381655809371ff">VSIStdoutSetRedirection</a> (<a class="el" href="cpl__vsi_8h.html#a3c515f8c3214663069ead6f3b358b161">VSIWriteFunction</a> pFct, FILE *stream)</td></tr> <tr class="separator:a9dd85bb810de58ec3a381655809371ff"><td class="memSeparator" colspan="2"> </td></tr> </table> <a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2> <div class="textblock"><p>Standard C Covers</p> <p>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.</p> <p>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. </p> </div><h2 class="groupheader">Macro Definition Documentation</h2> <a class="anchor" id="afdc1dc07ba4fe31933c9b522de783692"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define CPLReadDir   <a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3">VSIReadDir</a></td> </tr> </table> </div><div class="memdoc"> <p>Alias of <a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3" title="Read names in a directory. ">VSIReadDir()</a> </p> </div> </div> <a class="anchor" id="a0ef6b56ece448880c45976dab915c89c"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_CALLOC_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">nCount, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">nSize </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="cpl__vsi_8h.html#a7f624597e680ca5c73db210dcd187cbb">VSICallocVerbose</a>(nCount,nSize,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_CALLOC_VERBOSE </p> </div> </div> <a class="anchor" id="a13e9ada3d2bb3df2eae358b1037f9a1b"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_ISDIR</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">x</td><td>)</td> <td>   S_ISDIR(x)</td> </tr> </table> </div><div class="memdoc"> <p>Test if the file is a directory </p> </div> </div> <a class="anchor" id="a7e5cdfef2e52acfa6c2d723934e0d796"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_ISLNK</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">x</td><td>)</td> <td>   S_ISLNK(x)</td> </tr> </table> </div><div class="memdoc"> <p>Test if the file is a symbolic link </p> </div> </div> <a class="anchor" id="a57c4561cb89d1e6d0273c5be2a374777"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_ISREG</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">x</td><td>)</td> <td>   S_ISREG(x)</td> </tr> </table> </div><div class="memdoc"> <p>Test if the file is a regular file </p> </div> </div> <a class="anchor" id="a20bb0e8c2fc561600efe533babb577aa"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_L_OFFSET_MAX   <a class="el" href="cpl__port_8h.html#a82bd4992c0362d8addec634ec7d213b8">GUINTBIG_MAX</a></td> </tr> </table> </div><div class="memdoc"> <p>Maximum value for a file offset </p> </div> </div> <a class="anchor" id="ac85b87a2d19d51f10ecce10d4ba53570"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_MALLOC2_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">nSize1, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">nSize2 </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="cpl__vsi_8h.html#a8fec5f50fa0aa5a41480d15b650e8aeb">VSIMalloc2Verbose</a>(nSize1,nSize2,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_MALLOC2_VERBOSE </p> </div> </div> <a class="anchor" id="a7325cdd9f33067256f91301e84b96fa1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_MALLOC3_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">nSize1, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">nSize2, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">nSize3 </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="cpl__vsi_8h.html#acc60cbb0f8ce0e17d2a45b42176a87ca">VSIMalloc3Verbose</a>(nSize1,nSize2,nSize3,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_MALLOC3_VERBOSE </p> </div> </div> <a class="anchor" id="a7ab86f661220e57cd07d7bc6818183e1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_MALLOC_ALIGNED_AUTO_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">size</td><td>)</td> <td>   <a class="el" href="cpl__vsi_8h.html#a7209c01ef16a71a3f66ce5fd7059452d">VSIMallocAlignedAutoVerbose</a>(size,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p><a class="el" href="cpl__vsi_8h.html#a7209c01ef16a71a3f66ce5fd7059452d">VSIMallocAlignedAutoVerbose()</a> with FILE and LINE reporting </p> </div> </div> <a class="anchor" id="aade5a8741eb3362f68b2c3ee2d1b3676"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_MALLOC_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">size</td><td>)</td> <td>   <a class="el" href="cpl__vsi_8h.html#a281e545fcd4bb3973697eef42c47d2da">VSIMallocVerbose</a>(size,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_MALLOC_VERBOSE </p> </div> </div> <a class="anchor" id="a17f5ad7c5273fadcb66a4410f18fe0b4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_REALLOC_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">pOldPtr, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"> </td> <td class="paramname">nNewSize </td> </tr> <tr> <td></td> <td>)</td> <td></td><td>   <a class="el" href="cpl__vsi_8h.html#ac1afd07c9001a14289f6b8321f326a9d">VSIReallocVerbose</a>(pOldPtr,nNewSize,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_REALLOC_VERBOSE </p> </div> </div> <a class="anchor" id="a3e3fb3d4a5abff8b360d7b7941397503"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_STAT_EXISTS_FLAG   0x1</td> </tr> </table> </div><div class="memdoc"> <p>Flag provided to <a class="el" href="cpl__vsi_8h.html#a1fd6837a767e13c0618428ee8f020d93" title="Get filesystem object info. ">VSIStatExL()</a> to test if the file exists </p> </div> </div> <a class="anchor" id="ae67c44d6a3cae38b33d4b4b6bfb02131"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_STAT_NATURE_FLAG   0x2</td> </tr> </table> </div><div class="memdoc"> <p>Flag provided to <a class="el" href="cpl__vsi_8h.html#a1fd6837a767e13c0618428ee8f020d93" title="Get filesystem object info. ">VSIStatExL()</a> to query the nature (file/dir) of the file </p> </div> </div> <a class="anchor" id="a0c624636d6673f91667e8460417495e0"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_STAT_SET_ERROR_FLAG   0x8</td> </tr> </table> </div><div class="memdoc"> <p>Flag provided to <a class="el" href="cpl__vsi_8h.html#a1fd6837a767e13c0618428ee8f020d93" title="Get filesystem object info. ">VSIStatExL()</a> to issue a VSIError in case of failure </p> </div> </div> <a class="anchor" id="ac4465858df54d216dbade556b08a5d4d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_STAT_SIZE_FLAG   0x4</td> </tr> </table> </div><div class="memdoc"> <p>Flag provided to <a class="el" href="cpl__vsi_8h.html#a1fd6837a767e13c0618428ee8f020d93" title="Get filesystem object info. ">VSIStatExL()</a> to query the file size </p> </div> </div> <a class="anchor" id="ad5909c421c6d6bd385f6b702a9e7c693"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">#define VSI_STRDUP_VERBOSE</td> <td>(</td> <td class="paramtype"> </td> <td class="paramname">pszStr</td><td>)</td> <td>   <a class="el" href="cpl__vsi_8h.html#ae83d0502dfd42886ef51d9879f484596">VSIStrdupVerbose</a>(pszStr,__FILE__,__LINE__)</td> </tr> </table> </div><div class="memdoc"> <p>VSI_STRDUP_VERBOSE </p> </div> </div> <h2 class="groupheader">Typedef Documentation</h2> <a class="anchor" id="af56f9ebab1994e4c2ed3f0a50af787b2"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef <a class="el" href="cpl__port_8h.html#a4f0794a0fb78d55ba284a414191dbc93">GUIntBig</a> <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a></td> </tr> </table> </div><div class="memdoc"> <p>Type for a file offset </p> </div> </div> <a class="anchor" id="af1b1400e402360b38304de2b13d16c14"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef FILE <a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a></td> </tr> </table> </div><div class="memdoc"> <p>Opaque type for a FILE that implements the <a class="el" href="classVSIVirtualHandle.html">VSIVirtualHandle</a> API </p> </div> </div> <a class="anchor" id="accc7d5e1f7745ec91b5e32654870e324"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef struct VSI_STAT64_T <a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a></td> </tr> </table> </div><div class="memdoc"> <p>Type for <a class="el" href="cpl__vsi_8h.html#ac51b6905fb2c5324690a8d2c0e527810" title="Get filesystem object info. ">VSIStatL()</a> </p> </div> </div> <a class="anchor" id="a3c515f8c3214663069ead6f3b358b161"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">typedef size_t(* VSIWriteFunction)(const void *ptr, size_t size, size_t nmemb, FILE *stream)</td> </tr> </table> </div><div class="memdoc"> <p>Callback used by <a class="el" href="cpl__vsi_8h.html#a9dd85bb810de58ec3a381655809371ff">VSIStdoutSetRedirection()</a> </p> </div> </div> <h2 class="groupheader">Enumeration Type Documentation</h2> <a class="anchor" id="a2aa5b80209e71d81a118d647c6a9be66"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">enum <a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66">VSIRangeStatus</a></td> </tr> </table> </div><div class="memdoc"> <p>Range status </p> <table class="fieldtable"> <tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><em><a class="anchor" id="a2aa5b80209e71d81a118d647c6a9be66a68ea00493f4c073e19da9613d1d3d630"></a>VSI_RANGE_STATUS_UNKNOWN</em> </td><td class="fielddoc"> <p>Unknown </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="a2aa5b80209e71d81a118d647c6a9be66a20f1d70259ba20c9c8767fed7b0a7119"></a>VSI_RANGE_STATUS_DATA</em> </td><td class="fielddoc"> <p>Data present </p> </td></tr> <tr><td class="fieldname"><em><a class="anchor" id="a2aa5b80209e71d81a118d647c6a9be66a4518228a517000ca00f132bc67ac6dc7"></a>VSI_RANGE_STATUS_HOLE</em> </td><td class="fielddoc"> <p>Hole </p> </td></tr> </table> </div> </div> <h2 class="groupheader">Function Documentation</h2> <a class="anchor" id="ada199e0a1767d83b2a1190a06352a967"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL CPLGetPhysicalRAM </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return the total physical RAM in bytes.</p> <dl class="section return"><dt>Returns</dt><dd>the total physical RAM in bytes (or 0 in case of failure). </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.0 </dd></dl> </div> </div> <a class="anchor" id="a832811eed05c55ad07abd6aa266c9856"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL CPLGetUsablePhysicalRAM </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return the total physical RAM, usable by a process, in bytes.</p> <p>This is the same as <a class="el" href="cpl__vsi_8h.html#ada199e0a1767d83b2a1190a06352a967">CPLGetPhysicalRAM()</a> except it will limit to 2 GB for 32 bit processes.</p> <p>Note: This memory may already be partly used by other processes.</p> <dl class="section return"><dt>Returns</dt><dd>the total physical RAM, usable by a process, in bytes (or 0 in case of failure). </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.0 </dd></dl> </div> </div> <a class="anchor" id="a6197a01f4678227cf9e9ba73d1c97c6e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSICalloc </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Analog of calloc(). Use <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> to free </p> </div> </div> <a class="anchor" id="a7f624597e680ca5c73db210dcd187cbb"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSICallocVerbose </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSICallocVerbose </p> </div> </div> <a class="anchor" id="aa6dfbf71cb85c09cb4906371ec3eb4d9"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFCloseL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Close file. </p> <p>This function closes the indicated file.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fclose() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. Passing a nullptr produces undefined behavior.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on failure. </dd></dl> </div> </div> <a class="anchor" id="a34eabf7ad5a8f9dd17a651c757f3a285"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFEofL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Test for end of file. </p> <p>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 <a class="el" href="cpl__vsi_8h.html#ac4395f975a5bcf5365c2485e33f3bb85" title="Seek to requested offset. ">VSIFSeekL()</a> call.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX feof() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE if at EOF else FALSE. </dd></dl> </div> </div> <a class="anchor" id="a4db3ac34d0c757ceed322999395e5783"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFFlushL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Flush pending writes to disk. </p> <p>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.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fflush() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on error. </dd></dl> </div> </div> <a class="anchor" id="ae62237db0d3a71a72f7ceb8c2e1886cc"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIFGetNativeFileDescriptorL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Returns the "native" file descriptor for the virtual handle. </p> <p>This will only return a non-NULL value for "real" files handled by the operating system (to be opposed to GDAL virtual file systems).</p> <p>On POSIX systems, this will be a integer value ("fd") cast as a void*. On Windows systems, this will be the HANDLE.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the native file descriptor, or NULL. </dd></dl> </div> </div> <a class="anchor" id="a5e283e7d0a87882041f4116432667f54"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__vsi_8h.html#a2aa5b80209e71d81a118d647c6a9be66">VSIRangeStatus</a> CPL_DLL VSIFGetRangeStatusL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> </td> <td class="paramname"><em>nOffset</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> </td> <td class="paramname"><em>nLength</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Return if a given file range contains data or holes filled with zeroes. </p> <p>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.</p> <p>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".</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. </td></tr> <tr><td class="paramname">nOffset</td><td>offset of the start of the extent. </td></tr> <tr><td class="paramname">nLength</td><td>extent length.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>extent status: VSI_RANGE_STATUS_UNKNOWN, VSI_RANGE_STATUS_DATA or VSI_RANGE_STATUS_HOLE </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.2 </dd></dl> </div> </div> <a class="anchor" id="a8c1f65159790f3def58131f0218ac768"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL* VSIFileFromMemBuffer </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> * </td> <td class="paramname"><em>pabyData</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> </td> <td class="paramname"><em>nDataLength</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>bTakeOwnership</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Create memory "file" from a buffer. </p> <p>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.</p> <p>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.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the filename to be created. </td></tr> <tr><td class="paramname">pabyData</td><td>the data buffer for the file. </td></tr> <tr><td class="paramname">nDataLength</td><td>the length of buffer in bytes. </td></tr> <tr><td class="paramname">bTakeOwnership</td><td>TRUE to transfer "ownership" of buffer or FALSE.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>open file handle on created file (see <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>). </dd></dl> </div> </div> <a class="anchor" id="a21789b8264a68f3d68653ba1844f654c"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL* VSIFOpenExL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszAccess</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>bSetError</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Open file. </p> <p>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.</p> <p>Note that the "VSILFILE *" returned by this function is <em>NOT</em> 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.</p> <p>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 <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fopen() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the file to open. UTF-8 encoded. </td></tr> <tr><td class="paramname">pszAccess</td><td>access requested (i.e. "r", "r+", "w") </td></tr> <tr><td class="paramname">bSetError</td><td>flag determining whether or not this open call should set VSIErrors on failure.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>NULL on failure, or the file handle.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.1 </dd></dl> </div> </div> <a class="anchor" id="a8cd4933a84fe46b00733ecae85dd75f4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> CPL_DLL* VSIFOpenL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszAccess</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Open file. </p> <p>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.</p> <p>Note that the "VSILFILE *" returned since GDAL 1.8.0 by this function is <em>NOT</em> 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.</p> <p>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 <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fopen() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the file to open. UTF-8 encoded. </td></tr> <tr><td class="paramname">pszAccess</td><td>access requested (i.e. "r", "r+", "w")</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>NULL on failure, or the file handle. </dd></dl> </div> </div> <a class="anchor" id="a6697f986f76f51433939a3834a050e20"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL int CPL_DLL VSIFPutcL </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>nChar</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Write a single byte to the file. </p> <p>Writes the character nChar, cast to an unsigned char, to file.</p> <p>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.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nChar</td><td>character to write. </td></tr> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>1 in case of success, 0 on error. </dd></dl> </div> </div> <a class="anchor" id="a88da01d6d8b668a573cdf9a9a1c661c5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t CPL_DLL VSIFReadL </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>pBuffer</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read bytes from file. </p> <p>Reads nCount objects of nSize bytes from the indicated file at the current offset into the indicated buffer.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fread() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pBuffer</td><td>the buffer into which the data should be read (at least nCount * nSize bytes in size. </td></tr> <tr><td class="paramname">nSize</td><td>size of objects to read in bytes. </td></tr> <tr><td class="paramname">nCount</td><td>number of objects to read. </td></tr> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>number of objects successfully read. </dd></dl> </div> </div> <a class="anchor" id="a453f5c85d57ec5416cba426271d3b7f4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFReadMultiRangeL </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>nRanges</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void ** </td> <td class="paramname"><em>ppData</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const <a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> * </td> <td class="paramname"><em>panOffsets</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const size_t * </td> <td class="paramname"><em>panSizes</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read several ranges of bytes from file. </p> <p>Reads nRanges objects of panSizes[i] bytes from the indicated file at the offset panOffsets[i] into the buffer ppData[i].</p> <p>Ranges must be sorted in ascending start offset, and must not overlap each other.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory or /vsicurl/.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nRanges</td><td>number of ranges to read. </td></tr> <tr><td class="paramname">ppData</td><td>array of nRanges buffer into which the data should be read (ppData[i] must be at list panSizes[i] bytes). </td></tr> <tr><td class="paramname">panOffsets</td><td>array of nRanges offsets at which the data should be read. </td></tr> <tr><td class="paramname">panSizes</td><td>array of nRanges sizes of objects to read (in bytes). </td></tr> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 in case of success, -1 otherwise. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.9.0 </dd></dl> </div> </div> <a class="anchor" id="ac2f40ec7c0b1b2fd99a521973f015ea1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIFree </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>pData</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Analog of free() for data allocated with <a class="el" href="cpl__vsi_8h.html#a4aff24ea5596ad5451f87435518cc5a9">VSIMalloc()</a>, <a class="el" href="cpl__vsi_8h.html#a6197a01f4678227cf9e9ba73d1c97c6e">VSICalloc()</a>, <a class="el" href="cpl__vsi_8h.html#aa4b48d9ac65a9336f48062de9fcf5da6">VSIRealloc()</a> </p> </div> </div> <a class="anchor" id="a2ad4a6e290dc990fb4f177740f02dccc"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIFreeAligned </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>ptr</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Free a buffer allocated with <a class="el" href="cpl__vsi_8h.html#a63230ddc33aef1d7c0bc2e2ce964e8ed">VSIMallocAligned()</a>.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">ptr</td><td>Buffer to free. </td></tr> </table> </dd> </dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.2 </dd></dl> </div> </div> <a class="anchor" id="ac4395f975a5bcf5365c2485e33f3bb85"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFSeekL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> </td> <td class="paramname"><em>nOffset</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nWhence</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Seek to requested offset. </p> <p>Seek to the desired offset (nOffset) in the indicated file.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fseek() call.</p> <p>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 ).</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. </td></tr> <tr><td class="paramname">nOffset</td><td>offset in bytes. </td></tr> <tr><td class="paramname">nWhence</td><td>one of SEEK_SET, SEEK_CUR or SEEK_END.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 one failure. </dd></dl> </div> </div> <a class="anchor" id="a08012a251ac95dc29162dfa4f488f784"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> CPL_DLL VSIFTellL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Tell current file offset. </p> <p>Returns the current file read/write offset in bytes from the beginning of the file.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX ftell() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>file offset in bytes. </dd></dl> </div> </div> <a class="anchor" id="ab7c9e557dff7cf49864ecba10209da5d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIFTruncateL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> </td> <td class="paramname"><em>nNewSize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Truncate/expand the file to the specified size. </p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX ftruncate() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. </td></tr> <tr><td class="paramname">nNewSize</td><td>new size in bytes.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.9.0 </dd></dl> </div> </div> <a class="anchor" id="a32de2fda38b71bf682e675fb996b4b11"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t CPL_DLL VSIFWriteL </td> <td>(</td> <td class="paramtype">const void * </td> <td class="paramname"><em>pBuffer</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nCount</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Write bytes to file. </p> <p>Writess nCount objects of nSize bytes to the indicated file at the current offset into the indicated buffer.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX fwrite() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pBuffer</td><td>the buffer from which the data should be written (at least nCount * nSize bytes in size. </td></tr> <tr><td class="paramname">nSize</td><td>size of objects to read in bytes. </td></tr> <tr><td class="paramname">nCount</td><td>number of objects to read. </td></tr> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>number of objects successfully written. </dd></dl> </div> </div> <a class="anchor" id="a9ce1f198880c92e23b58ded7fe47807a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const char CPL_DLL* VSIGetActualURL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Returns the actual URL of a supplied filename. </p> <p>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"</p> <p>Note that the lifetime of the returned string, is short, and may be invalidated by any following GDAL functions.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the filesystem object. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>the actual URL corresponding to the supplied filename, or NULL. Should not be freed.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a870017a139f9950ee2b11db4ddafe275"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> CPL_DLL VSIGetDiskFreeSpace </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszDirname</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return free disk space available on the filesystem. </p> <p>This function returns the free disk space available on the filesystem.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszDirname</td><td>a directory of the filesystem to query. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>The free space in bytes. Or -1 in case of error. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.1 </dd></dl> </div> </div> <a class="anchor" id="ad66e870a2d86f48f2523f029eac5ce42"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">const char CPL_DLL* VSIGetFileSystemOptions </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return the list of options associated with a virtual file system handler as a serialized XML string. </p> <p>Those options may be set as configuration options with <a class="el" href="cpl__conv_8h.html#a2f9fe89aa77782c5a7b6847656f9e2f0">CPLSetConfigOption()</a>.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>a filename, or prefix of a virtual file system handler. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>a string, which must not be freed, or NULL if no options is declared. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a82685bb16e1682a8296291fa523d0611"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL** VSIGetFileSystemsPrefixes </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return the list of prefixes for virtual file system handlers currently registered. </p> <p>Typically: "", "/vsimem/", "/vsicurl/", etc</p> <dl class="section return"><dt>Returns</dt><dd>a NULL terminated list of prefixes. Must be freed with <a class="el" href="cpl__string_8h.html#ace6799a8ba4bbb58318f17aecd9f55dd">CSLDestroy()</a> </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a168515eb7370b6beff2a7888cec92970"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> CPL_DLL* VSIGetMemFileBuffer </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> * </td> <td class="paramname"><em>pnDataLength</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>bUnlinkAndSeize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Fetch buffer underlying memory file. </p> <p>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.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the name of the file to grab the buffer of. </td></tr> <tr><td class="paramname">pnDataLength</td><td>(file) length returned in this variable. </td></tr> <tr><td class="paramname">bUnlinkAndSeize</td><td>TRUE to remove the file, or FALSE to leave unaltered.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>pointer to memory buffer or NULL on failure. </dd></dl> </div> </div> <a class="anchor" id="a551673db737f6e820785fdd535722a4a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL* VSIGetSignedURL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__port_8h.html#ad6399986f130f30db93917dd65434a06">CSLConstList</a> </td> <td class="paramname"><em>papszOptions</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Returns a signed URL of a supplied filename. </p> <p>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 <a class="el" href="cpl__vsi_8h.html#ad66e870a2d86f48f2523f029eac5ce42" title="Return the list of options associated with a virtual file system handler as a serialized XML string...">VSIGetFileSystemOptions()</a>, are also valid in that context.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the filesystem object. UTF-8 encoded. </td></tr> <tr><td class="paramname">papszOptions</td><td>list of options, or NULL. Depend on file system handler. For /vsis3/, /vsigs/, /vsiaz/ and /vsioss/, the following options are supported: <ul> <li> START_DATE=YYMMDDTHHMMSSZ: date and time in UTC following ISO 8601 standard, corresponding to the start of validity of the URL. If not specified, current date time. </li> <li> EXPIRATION_DELAY=number_of_seconds: number between 1 and 604800 (seven days) for the validity of the signed URL. Defaults to 3600 (one hour) </li> <li> VERB=GET/HEAD/DELETE/PUT/POST: HTTP VERB for which the request will be used. Default to GET. </li> </ul> </td></tr> </table> </dd> </dl> <p>/vsiaz/ supports additional options: </p> <ul> <li> SIGNEDIDENTIFIER=value: to relate the given shared access signature to a corresponding stored access policy. </li> <li> SIGNEDPERMISSIONS=r|w: permissions associated with the shared access signature. Normally deduced from VERB. </li> </ul> <dl class="section return"><dt>Returns</dt><dd>a signed URL, or NULL. Should be freed with <a class="el" href="cpl__conv_8h.html#a21b7f312da39ddb0a12bdde06b153b48">CPLFree()</a>. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a19dbdf7c1c2bc7c3bc40932207b6e587"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIHasOptimizedReadMultiRange </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPath</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Returns if the filesystem supports efficient multi-range reading. </p> <p>Currently only returns TRUE for /vsicurl/ and derived file systems.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPath</td><td>the path of the filesystem object to be tested. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE if the file system is known to have an efficient multi-range reading.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a004f7a75de82875ddb022408ab1811a5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIIngestFile </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> ** </td> <td class="paramname"><em>ppabyRet</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> * </td> <td class="paramname"><em>pnSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__port_8h.html#af4f1fd7d2338bb38f28bdf32a0724e83">GIntBig</a> </td> <td class="paramname"><em>nMaxSize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ingest a file into memory. </p> <p>Read the whole content of a file into a memory buffer.</p> <p>Either fp or pszFilename can be NULL, but not both at the same time.</p> <p>If fp is passed non-NULL, it is the responsibility of the caller to close it.</p> <p>If non-NULL, the returned buffer is guaranteed to be NUL-terminated.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. </td></tr> <tr><td class="paramname">pszFilename</td><td>filename. </td></tr> <tr><td class="paramname">ppabyRet</td><td>pointer to the target buffer. *ppabyRet must be freed with <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> </td></tr> <tr><td class="paramname">pnSize</td><td>pointer to variable to store the file size. May be NULL. </td></tr> <tr><td class="paramname">nMaxSize</td><td>maximum size of file allowed. If no limit, set to a negative value.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE in case of success.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.11 </dd></dl> </div> </div> <a class="anchor" id="a3cde09f204df6f417653b7af4761178e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void VSIInstallGZipFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install GZip file system handler. </p> <p>A special file handler is installed that allows reading on-the-fly and writing in GZip (.gz) files.</p> <p>All portions of the file system underneath the base path "/vsigzip/" will be handled by this driver.</p> <p>Additional documentation is to be found at: <a href="http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip">http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip</a></p> <dl class="section since"><dt>Since</dt><dd>GDAL 1.6.0 </dd></dl> </div> </div> <a class="anchor" id="a6e22cbbc06008a40b0fcd052f596930b"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIInstallMemFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install "memory" file system handler. </p> <p>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.</p> <p>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.</p> <p>Directory related functions are supported.</p> <p>This code example demonstrates using GDAL to translate from one memory buffer to another.</p> <div class="fragment"><div class="line">* <a class="code" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> *ConvertBufferFormat( <a class="code" href="cpl__port_8h.html#ae7fbc84d3d1f7a40973be07382e28401">GByte</a> *pabyInData, <a class="code" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> nInDataLength,</div> <div class="line">* <a class="code" href="cpl__vsi_8h.html#af56f9ebab1994e4c2ed3f0a50af787b2">vsi_l_offset</a> *pnOutDataLength )</div> <div class="line">* {</div> <div class="line">* <span class="comment">// create memory file system object from buffer.</span></div> <div class="line">* <a class="code" href="cpl__vsi_8h.html#aa6dfbf71cb85c09cb4906371ec3eb4d9">VSIFCloseL</a>( <a class="code" href="cpl__vsi_8h.html#a8c1f65159790f3def58131f0218ac768">VSIFileFromMemBuffer</a>( <span class="stringliteral">"/vsimem/work.dat"</span>, pabyInData,</div> <div class="line">* nInDataLength, FALSE ) );</div> <div class="line">*</div> <div class="line">* <span class="comment">// Open memory buffer for read.</span></div> <div class="line">* GDALDatasetH hDS = GDALOpen( <span class="stringliteral">"/vsimem/work.dat"</span>, GA_ReadOnly );</div> <div class="line">*</div> <div class="line">* <span class="comment">// Get output format driver.</span></div> <div class="line">* GDALDriverH hDriver = GDALGetDriverByName( <span class="stringliteral">"GTiff"</span> );</div> <div class="line">* GDALDatasetH hOutDS;</div> <div class="line">*</div> <div class="line">* hOutDS = GDALCreateCopy( hDriver, <span class="stringliteral">"/vsimem/out.tif"</span>, hDS, TRUE, NULL,</div> <div class="line">* NULL, NULL );</div> <div class="line">*</div> <div class="line">* <span class="comment">// close source file, and "unlink" it.</span></div> <div class="line">* GDALClose( hDS );</div> <div class="line">* <a class="code" href="cpl__vsi_8h.html#abcf457f602620ffdf186b93b5ffbd9b4">VSIUnlink</a>( <span class="stringliteral">"/vsimem/work.dat"</span> );</div> <div class="line">*</div> <div class="line">* <span class="comment">// seize the buffer associated with the output file.</span></div> <div class="line">*</div> <div class="line">* <span class="keywordflow">return</span> <a class="code" href="cpl__vsi_8h.html#a168515eb7370b6beff2a7888cec92970">VSIGetMemFileBuffer</a>( <span class="stringliteral">"/vsimem/out.tif"</span>, pnOutDataLength, TRUE );</div> <div class="line">* }</div> <div class="line">* </div> </div><!-- fragment --> </div> </div> <a class="anchor" id="a3b48f4df3e5c74f307307023a21f2bfa"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIInstallSparseFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install /vsisparse/ virtual file handler.</p> <dl class="section see"><dt>See Also</dt><dd><a href="gdal_virtual_file_systems.html#gdal_virtual_file_systems_vsisparse">/vsisparse/ documentation</a> </dd></dl> </div> </div> <a class="anchor" id="a2c6b408477f59b40f0aec51d5980eb8e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void VSIInstallStdinHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install /vsistdin/ file system handler. </p> <p>A special file handler is installed that allows reading from the standard input stream.</p> <p>The file operations available are of course limited to Read() and forward Seek() (full seek in the first MB of a file).</p> <dl class="section since"><dt>Since</dt><dd>GDAL 1.8.0 </dd></dl> </div> </div> <a class="anchor" id="a61d2250ab2b22ca79b051a8479ee5383"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void VSIInstallStdoutHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install /vsistdout/ file system handler. </p> <p>A special file handler is installed that allows writing to the standard output stream.</p> <p>The file operations available are of course limited to Write().</p> <p>A variation of this file system exists as the /vsistdout_redirect/ file system handler, where the output function can be defined with <a class="el" href="cpl__vsi_8h.html#a9dd85bb810de58ec3a381655809371ff">VSIStdoutSetRedirection()</a>.</p> <dl class="section since"><dt>Since</dt><dd>GDAL 1.8.0 </dd></dl> </div> </div> <a class="anchor" id="a5e8e5d214b6b04b0665d394fb2abdb48"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIInstallSubFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install /vsisubfile/ virtual file handler.</p> <dl class="section see"><dt>See Also</dt><dd><a href="gdal_virtual_file_systems.html#gdal_virtual_file_systems_subfile">/vsisubfile/ documentation</a> </dd></dl> </div> </div> <a class="anchor" id="ad6dd983338849e7da4eaa88f6458ab64"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void VSIInstallTarFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install /vsitar/ file system handler. </p> <p>A special file handler is installed that allows reading on-the-fly in TAR (regular .tar, or compressed .tar.gz/.tgz) archives.</p> <p>All portions of the file system underneath the base path "/vsitar/" will be handled by this driver.</p> <p>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.</p> <p>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.</p> <p>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</p> <p>Syntactic sugar : if the tar archive contains only one file located at its root, just mentionning "/vsitar/path/to/the/file.tar" will work</p> <p><a class="el" href="cpl__vsi_8h.html#ac51b6905fb2c5324690a8d2c0e527810" title="Get filesystem object info. ">VSIStatL()</a> will return the uncompressed size in st_size member and file nature- file or directory - in st_mode member.</p> <p>Directory listing is available through <a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3" title="Read names in a directory. ">VSIReadDir()</a>.</p> <dl class="section since"><dt>Since</dt><dd>GDAL 1.8.0 </dd></dl> </div> </div> <a class="anchor" id="a884fac3cd6be2c09deb807e959d78b3a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void VSIInstallZipFileHandler </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Install ZIP file system handler. </p> <p>A special file handler is installed that allows reading on-the-fly in ZIP (.zip) archives.</p> <p>All portions of the file system underneath the base path "/vsizip/" will be handled by this driver.</p> <p>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.</p> <p>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.</p> <p>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</p> <p>Syntactic sugar : if the .zip file contains only one file located at its root, just mentioning "/vsizip/path/to/the/file.zip" will work</p> <p><a class="el" href="cpl__vsi_8h.html#ac51b6905fb2c5324690a8d2c0e527810" title="Get filesystem object info. ">VSIStatL()</a> will return the uncompressed size in st_size member and file nature- file or directory - in st_mode member.</p> <p>Directory listing is available through <a class="el" href="cpl__vsi_8h.html#abf9b6aa2f0038d4c4072a71befb510a3" title="Read names in a directory. ">VSIReadDir()</a>.</p> <p>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.</p> <p>Additional documentation is to be found at <a href="http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip">http://trac.osgeo.org/gdal/wiki/UserDocs/ReadInZip</a></p> <dl class="section since"><dt>Since</dt><dd>GDAL 1.6.0 </dd></dl> </div> </div> <a class="anchor" id="a749860de0b1a6880091d3eac733ba785"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIIsCaseSensitiveFS </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Returns if the filenames of the filesystem are case sensitive. </p> <p>This method retrieves to which filesystem belongs the passed filename and return TRUE if the filenames of that filesystem are case sensitive.</p> <p>Currently, this will return FALSE only for Windows real filenames. Other VSI virtual filesystems are case sensitive.</p> <p>This methods avoid ugly #ifndef WIN32 / #endif code, that is wrong when dealing with virtual filenames.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the filesystem object to be tested. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE if the filenames of the filesystem are case sensitive.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.8.0 </dd></dl> </div> </div> <a class="anchor" id="a4aff24ea5596ad5451f87435518cc5a9"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMalloc </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Analog of malloc(). Use <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> to free </p> </div> </div> <a class="anchor" id="a6a7d404a07c9821427be6f34fef64a48"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMalloc2 </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize2</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>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. <a class="el" href="cpl__conv_8h.html#a21b7f312da39ddb0a12bdde06b153b48">CPLFree()</a> or <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> can be used to free memory allocated by this function. </p> </div> </div> <a class="anchor" id="a8fec5f50fa0aa5a41480d15b650e8aeb"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMalloc2Verbose </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSIMalloc2Verbose </p> </div> </div> <a class="anchor" id="ae465e950b6417048e4196eb7039eadc5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMalloc3 </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize3</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>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. <a class="el" href="cpl__conv_8h.html#a21b7f312da39ddb0a12bdde06b153b48">CPLFree()</a> or <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> can be used to free memory allocated by this function. </p> </div> </div> <a class="anchor" id="acc60cbb0f8ce0e17d2a45b42176a87ca"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMalloc3Verbose </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize1</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize2</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize3</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSIMalloc3Verbose </p> </div> </div> <a class="anchor" id="a63230ddc33aef1d7c0bc2e2ce964e8ed"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMallocAligned </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nAlignment</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Allocates a buffer with an alignment constraint.</p> <p>The return value must be freed with <a class="el" href="cpl__vsi_8h.html#a2ad4a6e290dc990fb4f177740f02dccc">VSIFreeAligned()</a>.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nAlignment</td><td>Must be a power of 2, multiple of sizeof(void*), and lesser than 256. </td></tr> <tr><td class="paramname">nSize</td><td>Size of the buffer to allocate. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>a buffer aligned on nAlignment and of size nSize, or NULL </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.2 </dd></dl> </div> </div> <a class="anchor" id="af2e532c323e8398bf9d6483fe1d89d51"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMallocAlignedAuto </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Allocates a buffer with an alignment constraint such that it can be used by the most demanding vector instruction set on that platform.</p> <p>The return value must be freed with <a class="el" href="cpl__vsi_8h.html#a2ad4a6e290dc990fb4f177740f02dccc">VSIFreeAligned()</a>.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">nSize</td><td>Size of the buffer to allocate. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>an aligned buffer of size nSize, or NULL </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.2 </dd></dl> </div> </div> <a class="anchor" id="a7209c01ef16a71a3f66ce5fd7059452d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMallocAlignedAutoVerbose </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>See <a class="el" href="cpl__vsi_8h.html#af2e532c323e8398bf9d6483fe1d89d51">VSIMallocAlignedAuto()</a> </p> </div> </div> <a class="anchor" id="a281e545fcd4bb3973697eef42c47d2da"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIMallocVerbose </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"><em>nSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSIMallocVerbose </p> </div> </div> <a class="anchor" id="af7f1fa9ce0cf7e2869d7e9b0e8a571a6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIMkdir </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPathname</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>mode</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Create a directory. </p> <p>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.</p> <p>Analog of the POSIX mkdir() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPathname</td><td>the path to the directory to create. UTF-8 encoded. </td></tr> <tr><td class="paramname">mode</td><td>the permissions mode.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> </div> </div> <a class="anchor" id="ad9fb526a7fc44b62abd0fa3c5b523db9"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIMkdirRecursive </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPathname</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">long </td> <td class="paramname"><em>mode</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Create a directory and all its ancestors. </p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPathname</td><td>the path to the directory to create. UTF-8 encoded. </td></tr> <tr><td class="paramname">mode</td><td>the permissions mode.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="abf9b6aa2f0038d4c4072a71befb510a3"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL** VSIReadDir </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPath</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Read names in a directory. </p> <p>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 <a class="el" href="cpl__string_8h.html#ace6799a8ba4bbb58318f17aecd9f55dd">CSLDestroy()</a> when no longer needed.</p> <p>Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.</p> <p>This function used to be known as <a class="el" href="cpl__vsi_8h.html#afdc1dc07ba4fe31933c9b522de783692">CPLReadDir()</a>, but the old name is now deprecated.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPath</td><td>the relative, or absolute path of a directory to read. UTF-8 encoded. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>The list of entries in the directory, or NULL if the directory doesn't exist. Filenames are returned in UTF-8 encoding. </dd></dl> </div> </div> <a class="anchor" id="a7fdce75f1dbaa736ff4c903eff1fcf0f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL** VSIReadDirEx </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPath</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nMaxFiles</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Read names in a directory. </p> <p>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 <a class="el" href="cpl__string_8h.html#ace6799a8ba4bbb58318f17aecd9f55dd">CSLDestroy()</a> when no longer needed.</p> <p>Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.</p> <p>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 <a class="el" href="cpl__string_8h.html#abdd3f233fb08f5548cc4d231fd57eb82">CSLCount()</a> on the result is lesser or equal to nMaxFiles, then no truncation occurred.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPath</td><td>the relative, or absolute path of a directory to read. UTF-8 encoded. </td></tr> <tr><td class="paramname">nMaxFiles</td><td>maximum number of files after which to stop, or 0 for no limit. </td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>The list of entries in the directory, or NULL if the directory doesn't exist. Filenames are returned in UTF-8 encoding. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.1 </dd></dl> </div> </div> <a class="anchor" id="a2820f15ddbb82cc6372ea6e0f3d97c90"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL** VSIReadDirRecursive </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPathIn</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Read names in a directory recursively. </p> <p>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 <a class="el" href="cpl__string_8h.html#ace6799a8ba4bbb58318f17aecd9f55dd">CSLDestroy()</a> when no longer needed.</p> <p>Note that no error is issued via CPLError() if the directory path is invalid, though NULL is returned.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPathIn</td><td>the relative, or absolute path of a directory to read. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>The list of entries in the directory and subdirectories or NULL if the directory doesn't exist. Filenames are returned in UTF-8 encoding. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.10.0 </dd></dl> </div> </div> <a class="anchor" id="aa4b48d9ac65a9336f48062de9fcf5da6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIRealloc </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>pData</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nNewSize</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Analog of realloc(). Use <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> to free </p> </div> </div> <a class="anchor" id="ac1afd07c9001a14289f6b8321f326a9d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL* VSIReallocVerbose </td> <td>(</td> <td class="paramtype">void * </td> <td class="paramname"><em>pOldPtr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">size_t </td> <td class="paramname"><em>nNewSize</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSIReallocVerbose </p> </div> </div> <a class="anchor" id="a7a08ebbeec3cc5516eb174239bd7de9e"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIRename </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>oldpath</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>newpath</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Rename a file. </p> <p>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.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX rename() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">oldpath</td><td>the name of the file to be renamed. UTF-8 encoded. </td></tr> <tr><td class="paramname">newpath</td><td>the name the file should be given. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> </div> </div> <a class="anchor" id="ae4f5da1efca20f5be3c9c13fd8055621"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIRewindL </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#af1b1400e402360b38304de2b13d16c14">VSILFILE</a> * </td> <td class="paramname"><em>fp</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Rewind the file pointer to the beginning of the file. </p> <p>This is equivalent to VSIFSeekL( fp, 0, SEEK_SET )</p> <p>Analog of the POSIX rewind() call.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">fp</td><td>file handle opened with <a class="el" href="cpl__vsi_8h.html#a8cd4933a84fe46b00733ecae85dd75f4" title="Open file. ">VSIFOpenL()</a>. </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="a62db6412245d2ce07f94dd15771c54f6"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIRmdir </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszDirname</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Delete a directory. </p> <p>Deletes a directory object from the file system. On some systems the directory must be empty before it can be deleted.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX rmdir() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszDirname</td><td>the path of the directory to be deleted. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> </div> </div> <a class="anchor" id="a98dd1bf97fd95f42bac0aaf92de3defa"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIRmdirRecursive </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszDirname</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Delete a directory recursively. </p> <p>Deletes a directory object and its content from the file system.</p> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.3 </dd></dl> </div> </div> <a class="anchor" id="a1fd6837a767e13c0618428ee8f020d93"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIStatExL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a> * </td> <td class="paramname"><em>psStatBuf</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nFlags</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get filesystem object info. </p> <p>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.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>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/)</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the filesystem object to be queried. UTF-8 encoded. </td></tr> <tr><td class="paramname">psStatBuf</td><td>the structure to load with information. </td></tr> <tr><td class="paramname">nFlags</td><td>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.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 1.8.0 </dd></dl> </div> </div> <a class="anchor" id="ac51b6905fb2c5324690a8d2c0e527810"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIStatL </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#accc7d5e1f7745ec91b5e32654870e324">VSIStatBufL</a> * </td> <td class="paramname"><em>psStatBuf</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Get filesystem object info. </p> <p>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.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX stat() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the filesystem object to be queried. UTF-8 encoded. </td></tr> <tr><td class="paramname">psStatBuf</td><td>the structure to load with information.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> </div> </div> <a class="anchor" id="a9dd85bb810de58ec3a381655809371ff"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void CPL_DLL VSIStdoutSetRedirection </td> <td>(</td> <td class="paramtype"><a class="el" href="cpl__vsi_8h.html#a3c515f8c3214663069ead6f3b358b161">VSIWriteFunction</a> </td> <td class="paramname"><em>pFct</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">FILE * </td> <td class="paramname"><em>stream</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Set an alternative write function and output file handle instead of fwrite() / stdout.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pFct</td><td>Function with same signature as fwrite() </td></tr> <tr><td class="paramname">stream</td><td>File handle on which to output. Passed to pFct.</td></tr> </table> </dd> </dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.0 </dd></dl> </div> </div> <a class="anchor" id="a83a7abe4b127d0b39db748255e9fed64"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL* VSIStrdup </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszString</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Analog of strdup(). Use <a class="el" href="cpl__vsi_8h.html#ac2f40ec7c0b1b2fd99a521973f015ea1">VSIFree()</a> to free </p> </div> </div> <a class="anchor" id="ae83d0502dfd42886ef51d9879f484596"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL* VSIStrdupVerbose </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszStr</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFile</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>nLine</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>VSIStrdupVerbose </p> </div> </div> <a class="anchor" id="a63892837e77116dcd905f66daf5f64f1"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">char CPL_DLL* VSIStrerror </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>nErrno</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Return the error string corresponding to the error number. Do not free it </p> </div> </div> <a class="anchor" id="ac7a5fe244f1aa855275d2103ccc65f52"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSISupportsSparseFiles </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszPath</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Returns if the filesystem supports sparse files. </p> <p>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.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszPath</td><td>the path of the filesystem object to be tested. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>TRUE if the file system is known to support sparse files. FALSE may be returned both in cases where it is known to not support them, or when it is unknown.</dd></dl> <dl class="section since"><dt>Since</dt><dd>GDAL 2.2 </dd></dl> </div> </div> <a class="anchor" id="abcf457f602620ffdf186b93b5ffbd9b4"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int CPL_DLL VSIUnlink </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>pszFilename</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Delete a file. </p> <p>Deletes a file object from the file system.</p> <p>This method goes through the VSIFileHandler virtualization and may work on unusual filesystems such as in memory.</p> <p>Analog of the POSIX unlink() function.</p> <dl class="params"><dt>Parameters</dt><dd> <table class="params"> <tr><td class="paramname">pszFilename</td><td>the path of the file to be deleted. UTF-8 encoded.</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Returns</dt><dd>0 on success or -1 on an error. </dd></dl> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Generated by  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.5 </small></address> </body> </html>