| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> |
| <html> |
| <!-- SECTION: Programming --> |
| <head> |
| <title>File and Directory APIs</title> |
| <meta name='keywords' content='Programming'> |
| <meta name='creator' content='Mini-XML v2.4'> |
| <style type='text/css'><!-- |
| h1, h2, h3, p { font-family: sans-serif; text-align: justify; } |
| tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; } |
| pre { font-weight: bold; color: #7f0000; margin-left: 2em; } |
| span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; } |
| h3 span.info { float: right; font-size: 100%; } |
| h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; } |
| --></style> |
| </head> |
| <body> |
| <!-- |
| "$Id: api-filedir.shtml 6649 2007-07-11 21:46:42Z mike $" |
| |
| File and directory API introduction for the Common UNIX Printing System (CUPS). |
| |
| Copyright 2007 by Apple Inc. |
| Copyright 1997-2005 by Easy Software Products, all rights reserved. |
| |
| These coded instructions, statements, and computer programs are the |
| property of Apple Inc. and are protected by Federal copyright |
| law. Distribution and use rights are outlined in the file "LICENSE.txt" |
| which should have been included with this file. If this file is |
| file is missing or damaged, see the license at "http://www.cups.org/". |
| --> |
| |
| <h2 class='title'>Introduction</h2> |
| |
| <p>The CUPS file and directory APIs provide portable interfaces |
| for manipulating files and listing files and directories. Unlike |
| stdio <tt>FILE</tt> streams, the <tt>cupsFile</tt> functions |
| allow you to open more than 256 files at any given time. They |
| also manage the platform-specific details of locking, large file |
| support, line endings (CR, LF, or CR LF), and reading and writing |
| files using Flate ("gzip") compression. Finally, you can also |
| connect, read from, and write to network connections using the |
| <tt>cupsFile</tt> functions.</p> |
| |
| <p>The <tt>cupsDir</tt> functions manage the platform-specific |
| details of directory access/listing and provide a convenient way |
| to get both a list of files and the information (permissions, |
| size, timestamp, etc.) for each of those files.</p> |
| |
| <p>The CUPS scheduler (<tt>cupsd</tt>), <tt>mailto</tt> notifier, |
| and many of the CUPS API functions use these functions for |
| everything except console (stdin, stdout, stderr) I/O.</p> |
| |
| <h2 class='title'>General Usage</h2> |
| |
| <p>The <var><cups/dir.h></var> and |
| <var><cups/file.h></var> header files must be included to |
| use the <tt>cupsDir</tt> and <tt>cupsFile</tt> functions, |
| respectively.</p> |
| |
| <p>Programs using these functions must be linked to the CUPS |
| library: <var>libcups.a</var>, <var>libcups.so.2</var>, |
| <var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or |
| <var>libcups2.lib</var> depending on the platform. The following |
| command compiles <var>myprogram.c</var> using GCC and the CUPS |
| library:</p> |
| |
| <pre class='command'> |
| <kbd>gcc -o myprogram myprogram.c -lcups</kbd> |
| </pre> |
| |
| <h2 class='title'>Compatibility</h2> |
| |
| <p>All of these functions require CUPS 1.2 or higher.</p> |
| <h2 class='title'>Contents</h2> |
| <ul> |
| <li><a href='#FUNCTIONS'>Functions</a></li> |
| <li><a href='#STRUCTURES'>Structures</a></li> |
| <li><a href='#TYPES'>Types</a></li> |
| </ul> |
| <!-- NEW PAGE --> |
| <h2 class='title'><a name='FUNCTIONS'>Functions</a></h2> |
| <ul> |
| <li><a href='#cupsDirClose'><tt>cupsDirClose()</tt></a> </li> |
| <li><a href='#cupsDirOpen'><tt>cupsDirOpen()</tt></a> </li> |
| <li><a href='#cupsDirRead'><tt>cupsDirRead()</tt></a> </li> |
| <li><a href='#cupsDirRewind'><tt>cupsDirRewind()</tt></a> </li> |
| <li><a href='#cupsFileClose'><tt>cupsFileClose()</tt></a> </li> |
| <li><a href='#cupsFileCompression'><tt>cupsFileCompression()</tt></a> </li> |
| <li><a href='#cupsFileEOF'><tt>cupsFileEOF()</tt></a> </li> |
| <li><a href='#cupsFileFind'><tt>cupsFileFind()</tt></a> </li> |
| <li><a href='#cupsFileFlush'><tt>cupsFileFlush()</tt></a> </li> |
| <li><a href='#cupsFileGetChar'><tt>cupsFileGetChar()</tt></a> </li> |
| <li><a href='#cupsFileGetConf'><tt>cupsFileGetConf()</tt></a> </li> |
| <li><a href='#cupsFileGetLine'><tt>cupsFileGetLine()</tt></a> </li> |
| <li><a href='#cupsFileGets'><tt>cupsFileGets()</tt></a> </li> |
| <li><a href='#cupsFileLock'><tt>cupsFileLock()</tt></a> </li> |
| <li><a href='#cupsFileNumber'><tt>cupsFileNumber()</tt></a> </li> |
| <li><a href='#cupsFileOpen'><tt>cupsFileOpen()</tt></a> </li> |
| <li><a href='#cupsFileOpenFd'><tt>cupsFileOpenFd()</tt></a> </li> |
| <li><a href='#cupsFilePeekChar'><tt>cupsFilePeekChar()</tt></a> </li> |
| <li><a href='#cupsFilePrintf'><tt>cupsFilePrintf()</tt></a> </li> |
| <li><a href='#cupsFilePutChar'><tt>cupsFilePutChar()</tt></a> </li> |
| <li><a href='#cupsFilePuts'><tt>cupsFilePuts()</tt></a> </li> |
| <li><a href='#cupsFileRead'><tt>cupsFileRead()</tt></a> </li> |
| <li><a href='#cupsFileRewind'><tt>cupsFileRewind()</tt></a> </li> |
| <li><a href='#cupsFileSeek'><tt>cupsFileSeek()</tt></a> </li> |
| <li><a href='#cupsFileStderr'><tt>cupsFileStderr()</tt></a> </li> |
| <li><a href='#cupsFileStdin'><tt>cupsFileStdin()</tt></a> </li> |
| <li><a href='#cupsFileStdout'><tt>cupsFileStdout()</tt></a> </li> |
| <li><a href='#cupsFileTell'><tt>cupsFileTell()</tt></a> </li> |
| <li><a href='#cupsFileUnlock'><tt>cupsFileUnlock()</tt></a> </li> |
| <li><a href='#cupsFileWrite'><tt>cupsFileWrite()</tt></a> </li> |
| </ul> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsDirClose'>cupsDirClose()</a></h3> |
| <h4>Description</h4> |
| <p>Close a directory. |
| <h4>Syntax</h4> |
| <p><tt> |
| void<br> |
| cupsDirClose( |
| <a href='#cups_dir_t'>cups_dir_t</a> * dp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>dp</tt></td><td>Directory</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Nothing.</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsDirOpen'>cupsDirOpen()</a></h3> |
| <h4>Description</h4> |
| <p>Open a directory. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_dir_t'>cups_dir_t</a> *<br> |
| cupsDirOpen( |
| const char * directory); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>directory</tt></td><td>Directory name</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Directory</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsDirRead'>cupsDirRead()</a></h3> |
| <h4>Description</h4> |
| <p>Read the next directory entry. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_dentry_t'>cups_dentry_t</a> *<br> |
| cupsDirRead( |
| <a href='#cups_dir_t'>cups_dir_t</a> * dp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>dp</tt></td><td>Directory</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Directory entry</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsDirRewind'>cupsDirRewind()</a></h3> |
| <h4>Description</h4> |
| <p>Rewind to the start of the directory. |
| <h4>Syntax</h4> |
| <p><tt> |
| void<br> |
| cupsDirRewind( |
| <a href='#cups_dir_t'>cups_dir_t</a> * dp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>dp</tt></td><td>Directory</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Nothing.</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileClose'>cupsFileClose()</a></h3> |
| <h4>Description</h4> |
| <p>Close a CUPS file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileClose( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>0 on success, -1 on error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileCompression'>cupsFileCompression()</a></h3> |
| <h4>Description</h4> |
| <p>Return whether a file is compressed. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileCompression( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>CUPS_FILE_NONE or CUPS_FILE_GZIP</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileEOF'>cupsFileEOF()</a></h3> |
| <h4>Description</h4> |
| <p>Return the end-of-file status. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileEOF( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>1 on EOF, 0 otherwise</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileFind'>cupsFileFind()</a></h3> |
| <h4>Description</h4> |
| <p>Find a file using the specified path. |
| <p>This function allows the paths in the path string to be separated by |
| colons (UNIX standard) or semicolons (Windows standard) and stores the |
| result in the buffer supplied. If the file cannot be found in any of |
| the supplied paths, NULL is returned. A NULL path only matches the |
| current directory. |
| <h4>Syntax</h4> |
| <p><tt> |
| const char *<br> |
| cupsFileFind( |
| const char * filename, |
| const char * path, |
| int executable, |
| char * buffer, |
| int bufsize); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>filename</tt></td><td>File to find</td></tr> |
| <tr><td><tt>path</tt></td><td>Colon/semicolon-separated path</td></tr> |
| <tr><td><tt>executable</tt></td><td>1 = executable files, 0 = any file/dir</td></tr> |
| <tr><td><tt>buffer</tt></td><td>Filename buffer</td></tr> |
| <tr><td><tt>bufsize</tt></td><td>Size of filename buffer</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Full path to file or NULL</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileFlush'>cupsFileFlush()</a></h3> |
| <h4>Description</h4> |
| <p>Flush pending output. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileFlush( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>0 on success, -1 on error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileGetChar'>cupsFileGetChar()</a></h3> |
| <h4>Description</h4> |
| <p>Get a single character from a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileGetChar( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Character or -1 on EOF</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileGetConf'>cupsFileGetConf()</a></h3> |
| <h4>Description</h4> |
| <p>Get a line from a configuration file... |
| <h4>Syntax</h4> |
| <p><tt> |
| char *<br> |
| cupsFileGetConf( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| char * buf, |
| size_t buflen, |
| char ** value, |
| int * linenum); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>buf</tt></td><td>String buffer</td></tr> |
| <tr><td><tt>buflen</tt></td><td>Size of string buffer</td></tr> |
| <tr><td><tt>value</tt></td><td>Pointer to value</td></tr> |
| <tr><td><tt>linenum</tt></td><td>Current line number</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Line read or NULL on eof/error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileGetLine'>cupsFileGetLine()</a></h3> |
| <h4>Description</h4> |
| <p>Get a CR and/or LF-terminated line that may |
| contain binary data. |
| <p>This function differs from cupsFileGets() in that the trailing CR and LF |
| are preserved, as is any binary data on the line. The buffer is nul- |
| terminated, however you should use the returned length to determine |
| the number of bytes on the line. |
| <h4>Syntax</h4> |
| <p><tt> |
| size_t<br> |
| cupsFileGetLine( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| char * buf, |
| size_t buflen); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>File to read from</td></tr> |
| <tr><td><tt>buf</tt></td><td>Buffer</td></tr> |
| <tr><td><tt>buflen</tt></td><td>Size of buffer</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Number of bytes on line or 0 on EOF</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileGets'>cupsFileGets()</a></h3> |
| <h4>Description</h4> |
| <p>Get a CR and/or LF-terminated line. |
| <h4>Syntax</h4> |
| <p><tt> |
| char *<br> |
| cupsFileGets( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| char * buf, |
| size_t buflen); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>buf</tt></td><td>String buffer</td></tr> |
| <tr><td><tt>buflen</tt></td><td>Size of string buffer</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Line read or NULL on eof/error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileLock'>cupsFileLock()</a></h3> |
| <h4>Description</h4> |
| <p>Temporarily lock access to a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileLock( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| int block); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>File to lock</td></tr> |
| <tr><td><tt>block</tt></td><td>1 to wait for the lock, 0 to fail right away</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>0 on success, -1 on error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileNumber'>cupsFileNumber()</a></h3> |
| <h4>Description</h4> |
| <p>Return the file descriptor associated with a CUPS file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileNumber( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>File descriptor</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileOpen'>cupsFileOpen()</a></h3> |
| <h4>Description</h4> |
| <p>Open a CUPS file. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_file_t'>cups_file_t</a> *<br> |
| cupsFileOpen( |
| const char * filename, |
| const char * mode); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>filename</tt></td><td>Name of file</td></tr> |
| <tr><td><tt>mode</tt></td><td>Open mode</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>CUPS file or NULL</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileOpenFd'>cupsFileOpenFd()</a></h3> |
| <h4>Description</h4> |
| <p>Open a CUPS file using a file descriptor. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_file_t'>cups_file_t</a> *<br> |
| cupsFileOpenFd( |
| int fd, |
| const char * mode); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fd</tt></td><td>File descriptor</td></tr> |
| <tr><td><tt>mode</tt></td><td>Open mode</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>CUPS file or NULL</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFilePeekChar'>cupsFilePeekChar()</a></h3> |
| <h4>Description</h4> |
| <p>Peek at the next character from a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFilePeekChar( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Character or -1 on EOF</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFilePrintf'>cupsFilePrintf()</a></h3> |
| <h4>Description</h4> |
| <p>Write a formatted string. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFilePrintf( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| const char * format, |
| ...); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>format</tt></td><td>Printf-style format string</td></tr> |
| <tr><td><tt>...</tt></td><td>Additional args as necessary</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Number of bytes written or -1</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFilePutChar'>cupsFilePutChar()</a></h3> |
| <h4>Description</h4> |
| <p>Write a character. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFilePutChar( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| int c); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>c</tt></td><td>Character to write</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>0 on success, -1 on error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFilePuts'>cupsFilePuts()</a></h3> |
| <h4>Description</h4> |
| <p>Write a string. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFilePuts( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| const char * s); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>s</tt></td><td>String to write</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Number of bytes written or -1</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileRead'>cupsFileRead()</a></h3> |
| <h4>Description</h4> |
| <p>Read from a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#ssize_t'>ssize_t</a><br> |
| cupsFileRead( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| char * buf, |
| size_t bytes); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>buf</tt></td><td>Buffer</td></tr> |
| <tr><td><tt>bytes</tt></td><td>Number of bytes to read</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Number of bytes read or -1</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileRewind'>cupsFileRewind()</a></h3> |
| <h4>Description</h4> |
| <p>Rewind a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| off_t<br> |
| cupsFileRewind( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>New file position or -1</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileSeek'>cupsFileSeek()</a></h3> |
| <h4>Description</h4> |
| <p>Seek in a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| off_t<br> |
| cupsFileSeek( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| off_t pos); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>pos</tt></td><td>Position in file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>New file position or -1</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileStderr'>cupsFileStderr()</a></h3> |
| <h4>Description</h4> |
| <p>Just reposition the current pointer, since we have the right |
| range... |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_file_t'>cups_file_t</a> *<br> |
| cupsFileStderr(void); |
| </tt></p> |
| <h4>Arguments</h4> |
| <p>None.</p> |
| <h4>Returns</h4> |
| <p>Return a CUPS file associated with stderr.</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileStdin'>cupsFileStdin()</a></h3> |
| <h4>Description</h4> |
| <p>Open file descriptor 2... |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_file_t'>cups_file_t</a> *<br> |
| cupsFileStdin(void); |
| </tt></p> |
| <h4>Arguments</h4> |
| <p>None.</p> |
| <h4>Returns</h4> |
| <p>Return a CUPS file associated with stdin.</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileStdout'>cupsFileStdout()</a></h3> |
| <h4>Description</h4> |
| <p>Open file descriptor 0... |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#cups_file_t'>cups_file_t</a> *<br> |
| cupsFileStdout(void); |
| </tt></p> |
| <h4>Arguments</h4> |
| <p>None.</p> |
| <h4>Returns</h4> |
| <p>Return a CUPS file associated with stdout.</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileTell'>cupsFileTell()</a></h3> |
| <h4>Description</h4> |
| <p>Return the current file position. |
| <h4>Syntax</h4> |
| <p><tt> |
| off_t<br> |
| cupsFileTell( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>File position</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileUnlock'>cupsFileUnlock()</a></h3> |
| <h4>Description</h4> |
| <p>Unlock access to a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| int<br> |
| cupsFileUnlock( |
| <a href='#cups_file_t'>cups_file_t</a> * fp); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>File to lock</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>0 on success, -1 on error</p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cupsFileWrite'>cupsFileWrite()</a></h3> |
| <h4>Description</h4> |
| <p>Write to a file. |
| <h4>Syntax</h4> |
| <p><tt> |
| <a href='#ssize_t'>ssize_t</a><br> |
| cupsFileWrite( |
| <a href='#cups_file_t'>cups_file_t</a> * fp, |
| const char * buf, |
| size_t bytes); |
| </tt></p> |
| <h4>Arguments</h4> |
| <div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0' summary='Arguments'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fp</tt></td><td>CUPS file</td></tr> |
| <tr><td><tt>buf</tt></td><td>Buffer</td></tr> |
| <tr><td><tt>bytes</tt></td><td>Number of bytes to write</td></tr> |
| </tbody></table></div> |
| <h4>Returns</h4> |
| <p>Number of bytes written</p> |
| <!-- NEW PAGE --> |
| <h2 class='title'><a name='STRUCTURES'>Structures</a></h2> |
| <ul> |
| <li><a href='#cups_dentry_s'><tt>cups_dentry_s</tt></a> </li> |
| </ul> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cups_dentry_s'>cups_dentry_s</a></h3> |
| <h4>Description</h4> |
| <p>Directory entry type |
| <h4>Definition</h4> |
| <p><tt> |
| struct cups_dentry_s<br> |
| {<br> |
| struct stat fileinfo;<br> |
| char filename[260];<br> |
| };</tt></p> |
| <h4>Members</h4> |
| <div class='table'><table align='center' border='1' width='80%' summary='Members'> |
| <thead><tr><th>Name</th><th>Description</th></tr></thead> |
| <tbody> |
| <tr><td><tt>fileinfo</tt> </td><td>File information |
| </td></tr> |
| <tr><td><tt>filename[260]</tt> </td><td>File name |
| </td></tr> |
| </tbody></table></div> |
| <!-- NEW PAGE --> |
| <h2 class='title'><a name='TYPES'>Types</a></h2> |
| <ul> |
| <li><a href='#cups_dentry_t'><tt>cups_dentry_t</tt></a> </li> |
| <li><a href='#cups_dir_t'><tt>cups_dir_t</tt></a> </li> |
| <li><a href='#cups_file_t'><tt>cups_file_t</tt></a> </li> |
| </ul> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cups_dentry_t'>cups_dentry_t</a></h3> |
| <h4>Description</h4> |
| <p>Directory entry type |
| <h4>Definition</h4> |
| <p><tt> |
| typedef struct <a href='#cups_dentry_s'>cups_dentry_s</a> cups_dentry_t; |
| </tt></p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cups_dir_t'>cups_dir_t</a></h3> |
| <h4>Description</h4> |
| <p>Directory type |
| <h4>Definition</h4> |
| <p><tt> |
| typedef struct _cups_dir_s cups_dir_t; |
| </tt></p> |
| <!-- NEW PAGE --> |
| <h3 class='title'><a name='cups_file_t'>cups_file_t</a></h3> |
| <h4>Description</h4> |
| <p>CUPS file type |
| <h4>Definition</h4> |
| <p><tt> |
| typedef struct _cups_file_s cups_file_t; |
| </tt></p> |
| </body> |
| </html> |