]> git.ipfire.org Git - thirdparty/cups.git/blame - doc/help/api-filedir.html
Remove svn:keywords since they cause svn_load_dirs.pl to complain about every file.
[thirdparty/cups.git] / doc / help / api-filedir.html
CommitLineData
ef416fc2 1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
2<html>
3<!-- SECTION: Programming -->
4<head>
5 <title>File and Directory APIs</title>
6 <meta name='keywords' content='Programming'>
7 <meta name='creator' content='Mini-XML v2.3'>
8 <style type='text/css'><!--
9 h1, h2, h3, p { font-family: sans-serif; text-align: justify; }
10 tt, pre a:link, pre a:visited, tt a:link, tt a:visited { font-weight: bold; color: #7f0000; }
11 pre { font-weight: bold; color: #7f0000; margin-left: 2em; }
12 span.info { background: #000000; border: solid thin #000000; color: #ffffff; font-size: 80%; font-style: italic; font-weight: bold; white-space: nowrap; }
13 h3 span.info { float: right; font-size: 100%; }
14 h1.title, h2.title, h3.title { border-bottom: solid 2px #000000; }
15 --></style>
16</head>
17<body>
18<!--
c07d5b2d 19 "$Id: api-filedir.html 177 2006-06-21 00:20:03Z jlovell $"
ef416fc2 20
21 File and directory API introduction for the Common UNIX Printing System (CUPS).
22
23 Copyright 1997-2005 by Easy Software Products.
24
25 These coded instructions, statements, and computer programs are the
26 property of Easy Software Products and are protected by Federal
27 copyright law. Distribution and use rights are outlined in the file
28 "LICENSE.txt" which should have been included with this file. If this
29 file is missing or damaged please contact Easy Software Products
30 at:
31
32 Attn: CUPS Licensing Information
33 Easy Software Products
34 44141 Airport View Drive, Suite 204
35 Hollywood, Maryland 20636 USA
36
37 Voice: (301) 373-9600
38 EMail: cups-info@cups.org
39 WWW: http://www.cups.org
40-->
41
42<h2 class='title'>Introduction</h2>
43
44<p>The CUPS file and directory APIs provide portable interfaces
45for manipulating files and listing files and directories. Unlike
46stdio <tt>FILE</tt> streams, the <tt>cupsFile</tt> functions
47allow you to open more than 256 files at any given time. They
48also manage the platform-specific details of locking, large file
49support, line endings (CR, LF, or CR LF), and reading and writing
50files using Flate ("gzip") compression. Finally, you can also
51connect, read from, and write to network connections using the
52<tt>cupsFile</tt> functions.</p>
53
54<p>The <tt>cupsDir</tt> functions manage the platform-specific
55details of directory access/listing and provide a convenient way
56to get both a list of files and the information (permissions,
57size, timestamp, etc.) for each of those files.</p>
58
59<p>The CUPS scheduler (<tt>cupsd</tt>), <tt>mailto</tt> notifier,
60and many of the CUPS API functions use these functions for
61everything except console (stdin, stdout, stderr) I/O.</p>
62
63<h2 class='title'>General Usage</h2>
64
65<p>The <var>&lt;cups/dir.h&gt;</var> and
66<var>&lt;cups/file.h&gt;</var> header files must be included to
67use the <tt>cupsDir</tt> and <tt>cupsFile</tt> functions,
68respectively.</p>
69
70<p>Programs using these functions must be linked to the CUPS
71library: <var>libcups.a</var>, <var>libcups.so.2</var>,
72<var>libcups.2.dylib</var>, <var>libcups_s.a</var>, or
73<var>libcups2.lib</var> depending on the platform. The following
74command compiles <var>myprogram.c</var> using GCC and the CUPS
75library:</p>
76
77<pre class='command'>
78<kbd>gcc -o myprogram myprogram.c -lcups</kbd>
79</pre>
80
81<h2 class='title'>Compatibility</h2>
82
83<p>All of these functions require CUPS 1.2 or higher.</p>
84<h2 class='title'>Contents</h2>
85<ul>
86 <li><a href='#FUNCTIONS'>Functions</a></li>
87 <li><a href='#STRUCTURES'>Structures</a></li>
88 <li><a href='#TYPES'>Types</a></li>
89</ul>
90<!-- NEW PAGE -->
91<h2 class='title'><a name='FUNCTIONS'>Functions</a></h2>
92<ul>
93 <li><a href='#cupsDirClose'><tt>cupsDirClose()</tt></a> </li>
94 <li><a href='#cupsDirOpen'><tt>cupsDirOpen()</tt></a> </li>
95 <li><a href='#cupsDirRead'><tt>cupsDirRead()</tt></a> </li>
96 <li><a href='#cupsDirRewind'><tt>cupsDirRewind()</tt></a> </li>
97 <li><a href='#cupsFileClose'><tt>cupsFileClose()</tt></a> </li>
98 <li><a href='#cupsFileCompression'><tt>cupsFileCompression()</tt></a> </li>
99 <li><a href='#cupsFileEOF'><tt>cupsFileEOF()</tt></a> </li>
ecdc0628 100 <li><a href='#cupsFileFind'><tt>cupsFileFind()</tt></a> </li>
ef416fc2 101 <li><a href='#cupsFileFlush'><tt>cupsFileFlush()</tt></a> </li>
102 <li><a href='#cupsFileGetChar'><tt>cupsFileGetChar()</tt></a> </li>
103 <li><a href='#cupsFileGetConf'><tt>cupsFileGetConf()</tt></a> </li>
80ca4592 104 <li><a href='#cupsFileGetLine'><tt>cupsFileGetLine()</tt></a> </li>
ef416fc2 105 <li><a href='#cupsFileGets'><tt>cupsFileGets()</tt></a> </li>
106 <li><a href='#cupsFileLock'><tt>cupsFileLock()</tt></a> </li>
107 <li><a href='#cupsFileNumber'><tt>cupsFileNumber()</tt></a> </li>
108 <li><a href='#cupsFileOpen'><tt>cupsFileOpen()</tt></a> </li>
109 <li><a href='#cupsFileOpenFd'><tt>cupsFileOpenFd()</tt></a> </li>
110 <li><a href='#cupsFilePeekChar'><tt>cupsFilePeekChar()</tt></a> </li>
111 <li><a href='#cupsFilePrintf'><tt>cupsFilePrintf()</tt></a> </li>
112 <li><a href='#cupsFilePutChar'><tt>cupsFilePutChar()</tt></a> </li>
113 <li><a href='#cupsFilePuts'><tt>cupsFilePuts()</tt></a> </li>
114 <li><a href='#cupsFileRead'><tt>cupsFileRead()</tt></a> </li>
115 <li><a href='#cupsFileRewind'><tt>cupsFileRewind()</tt></a> </li>
116 <li><a href='#cupsFileSeek'><tt>cupsFileSeek()</tt></a> </li>
80ca4592 117 <li><a href='#cupsFileStderr'><tt>cupsFileStderr()</tt></a> </li>
118 <li><a href='#cupsFileStdin'><tt>cupsFileStdin()</tt></a> </li>
119 <li><a href='#cupsFileStdout'><tt>cupsFileStdout()</tt></a> </li>
ef416fc2 120 <li><a href='#cupsFileTell'><tt>cupsFileTell()</tt></a> </li>
121 <li><a href='#cupsFileUnlock'><tt>cupsFileUnlock()</tt></a> </li>
122 <li><a href='#cupsFileWrite'><tt>cupsFileWrite()</tt></a> </li>
123</ul>
124<!-- NEW PAGE -->
125<h3 class='title'><a name='cupsDirClose'>cupsDirClose()</a></h3>
126<h4>Description</h4>
127<p>Close a directory.</p>
128<h4>Syntax</h4>
129<pre>
130void
131cupsDirClose(
132 <a href='#cups_dir_t'>cups_dir_t</a> * dp);
133</pre>
134<h4>Arguments</h4>
135<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
136<thead><tr><th>Name</th><th>Description</th></tr></thead>
137<tbody>
138<tr><td><tt>dp</tt></td><td>Directory</td></tr>
139</tbody></table></div>
140<h4>Returns</h4>
141<p>Nothing.</p>
142<!-- NEW PAGE -->
143<h3 class='title'><a name='cupsDirOpen'>cupsDirOpen()</a></h3>
144<h4>Description</h4>
145<p>Open a directory.</p>
146<h4>Syntax</h4>
147<pre>
148<a href='#cups_dir_t'>cups_dir_t</a> *
149cupsDirOpen(
150 const char * directory);
151</pre>
152<h4>Arguments</h4>
153<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
154<thead><tr><th>Name</th><th>Description</th></tr></thead>
155<tbody>
156<tr><td><tt>directory</tt></td><td>Directory name</td></tr>
157</tbody></table></div>
158<h4>Returns</h4>
159<p>Directory</p>
160<!-- NEW PAGE -->
161<h3 class='title'><a name='cupsDirRead'>cupsDirRead()</a></h3>
162<h4>Description</h4>
163<p>Read the next directory entry.</p>
164<h4>Syntax</h4>
165<pre>
166<a href='#cups_dentry_t'>cups_dentry_t</a> *
167cupsDirRead(
168 <a href='#cups_dir_t'>cups_dir_t</a> * dp);
169</pre>
170<h4>Arguments</h4>
171<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
172<thead><tr><th>Name</th><th>Description</th></tr></thead>
173<tbody>
174<tr><td><tt>dp</tt></td><td>Directory</td></tr>
175</tbody></table></div>
176<h4>Returns</h4>
177<p>Directory entry</p>
178<!-- NEW PAGE -->
179<h3 class='title'><a name='cupsDirRewind'>cupsDirRewind()</a></h3>
180<h4>Description</h4>
181<p>Rewind to the start of the directory.</p>
182<h4>Syntax</h4>
183<pre>
184void
185cupsDirRewind(
186 <a href='#cups_dir_t'>cups_dir_t</a> * dp);
187</pre>
188<h4>Arguments</h4>
189<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
190<thead><tr><th>Name</th><th>Description</th></tr></thead>
191<tbody>
192<tr><td><tt>dp</tt></td><td>Directory</td></tr>
193</tbody></table></div>
194<h4>Returns</h4>
195<p>Nothing.</p>
196<!-- NEW PAGE -->
197<h3 class='title'><a name='cupsFileClose'>cupsFileClose()</a></h3>
198<h4>Description</h4>
199<p>Close a CUPS file.</p>
200<h4>Syntax</h4>
201<pre>
202int
203cupsFileClose(
204 <a href='#cups_file_t'>cups_file_t</a> * fp);
205</pre>
206<h4>Arguments</h4>
207<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
208<thead><tr><th>Name</th><th>Description</th></tr></thead>
209<tbody>
210<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
211</tbody></table></div>
212<h4>Returns</h4>
213<p>0 on success, -1 on error</p>
214<!-- NEW PAGE -->
215<h3 class='title'><a name='cupsFileCompression'>cupsFileCompression()</a></h3>
216<h4>Description</h4>
217<p>Return whether a file is compressed.</p>
218<h4>Syntax</h4>
219<pre>
220int
221cupsFileCompression(
222 <a href='#cups_file_t'>cups_file_t</a> * fp);
223</pre>
224<h4>Arguments</h4>
225<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
226<thead><tr><th>Name</th><th>Description</th></tr></thead>
227<tbody>
228<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
229</tbody></table></div>
230<h4>Returns</h4>
231<p>CUPS_FILE_NONE or CUPS_FILE_GZIP</p>
232<!-- NEW PAGE -->
233<h3 class='title'><a name='cupsFileEOF'>cupsFileEOF()</a></h3>
234<h4>Description</h4>
235<p>Return the end-of-file status.</p>
236<h4>Syntax</h4>
237<pre>
238int
239cupsFileEOF(
240 <a href='#cups_file_t'>cups_file_t</a> * fp);
241</pre>
242<h4>Arguments</h4>
243<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
244<thead><tr><th>Name</th><th>Description</th></tr></thead>
245<tbody>
246<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
247</tbody></table></div>
248<h4>Returns</h4>
249<p>1 on EOF, 0 otherwise</p>
250<!-- NEW PAGE -->
ecdc0628 251<h3 class='title'><a name='cupsFileFind'>cupsFileFind()</a></h3>
252<h4>Description</h4>
253<p>Find a file using the specified path.
254
255This function allows the paths in the path string to be separated by
256colons (UNIX standard) or semicolons (Windows standard) and stores the
257result in the buffer supplied. If the file cannot be found in any of
258the supplied paths, NULL is returned. A NULL path only matches the
259current directory.</p>
260<h4>Syntax</h4>
261<pre>
262const char *
263cupsFileFind(
264 const char * filename,
265 const char * path,
266 int executable,
267 char * buffer,
268 int bufsize);
269</pre>
270<h4>Arguments</h4>
271<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
272<thead><tr><th>Name</th><th>Description</th></tr></thead>
273<tbody>
274<tr><td><tt>filename</tt></td><td>File to find</td></tr>
275<tr><td><tt>path</tt></td><td>Colon/semicolon-separated path</td></tr>
276<tr><td><tt>executable</tt></td><td>1 = executable files, 0 = any file/dir</td></tr>
277<tr><td><tt>buffer</tt></td><td>Filename buffer</td></tr>
278<tr><td><tt>bufsize</tt></td><td>Size of filename buffer</td></tr>
279</tbody></table></div>
280<h4>Returns</h4>
281<p>Full path to file or NULL</p>
282<!-- NEW PAGE -->
ef416fc2 283<h3 class='title'><a name='cupsFileFlush'>cupsFileFlush()</a></h3>
284<h4>Description</h4>
285<p>Flush pending output.</p>
286<h4>Syntax</h4>
287<pre>
288int
289cupsFileFlush(
290 <a href='#cups_file_t'>cups_file_t</a> * fp);
291</pre>
292<h4>Arguments</h4>
293<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
294<thead><tr><th>Name</th><th>Description</th></tr></thead>
295<tbody>
296<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
297</tbody></table></div>
298<h4>Returns</h4>
299<p>0 on success, -1 on error</p>
300<!-- NEW PAGE -->
301<h3 class='title'><a name='cupsFileGetChar'>cupsFileGetChar()</a></h3>
302<h4>Description</h4>
303<p>Get a single character from a file.</p>
304<h4>Syntax</h4>
305<pre>
306int
307cupsFileGetChar(
308 <a href='#cups_file_t'>cups_file_t</a> * fp);
309</pre>
310<h4>Arguments</h4>
311<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
312<thead><tr><th>Name</th><th>Description</th></tr></thead>
313<tbody>
314<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
315</tbody></table></div>
316<h4>Returns</h4>
317<p>Character or -1 on EOF</p>
318<!-- NEW PAGE -->
319<h3 class='title'><a name='cupsFileGetConf'>cupsFileGetConf()</a></h3>
320<h4>Description</h4>
321<p>Get a line from a configuration file...</p>
322<h4>Syntax</h4>
323<pre>
324char *
325cupsFileGetConf(
326 <a href='#cups_file_t'>cups_file_t</a> * fp,
327 char * buf,
328 size_t buflen,
329 char ** value,
330 int * linenum);
331</pre>
332<h4>Arguments</h4>
333<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
334<thead><tr><th>Name</th><th>Description</th></tr></thead>
335<tbody>
336<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
337<tr><td><tt>buf</tt></td><td>String buffer</td></tr>
338<tr><td><tt>buflen</tt></td><td>Size of string buffer</td></tr>
339<tr><td><tt>value</tt></td><td>Pointer to value</td></tr>
340<tr><td><tt>linenum</tt></td><td>Current line number</td></tr>
341</tbody></table></div>
342<h4>Returns</h4>
ecdc0628 343<p>Line read or NULL on eof/error</p>
ef416fc2 344<!-- NEW PAGE -->
80ca4592 345<h3 class='title'><a name='cupsFileGetLine'>cupsFileGetLine()</a></h3>
346<h4>Description</h4>
347<p>Get a CR and/or LF-terminated line that may
348contain binary data.
349
350This function differs from cupsFileGets() in that the trailing CR and LF
351are preserved, as is any binary data on the line. The buffer is nul-
352terminated, however you should use the returned length to determine
353the number of bytes on the line.</p>
354<h4>Syntax</h4>
355<pre>
356size_t
357cupsFileGetLine(
358 <a href='#cups_file_t'>cups_file_t</a> * fp,
359 char * buf,
360 size_t buflen);
361</pre>
362<h4>Arguments</h4>
363<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
364<thead><tr><th>Name</th><th>Description</th></tr></thead>
365<tbody>
366<tr><td><tt>fp</tt></td><td>File to read from</td></tr>
367<tr><td><tt>buf</tt></td><td>Buffer</td></tr>
368<tr><td><tt>buflen</tt></td><td>Size of buffer</td></tr>
369</tbody></table></div>
370<h4>Returns</h4>
371<p>Number of bytes on line or 0 on EOF</p>
372<!-- NEW PAGE -->
ef416fc2 373<h3 class='title'><a name='cupsFileGets'>cupsFileGets()</a></h3>
374<h4>Description</h4>
375<p>Get a CR and/or LF-terminated line.</p>
376<h4>Syntax</h4>
377<pre>
378char *
379cupsFileGets(
380 <a href='#cups_file_t'>cups_file_t</a> * fp,
381 char * buf,
382 size_t buflen);
383</pre>
384<h4>Arguments</h4>
385<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
386<thead><tr><th>Name</th><th>Description</th></tr></thead>
387<tbody>
388<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
389<tr><td><tt>buf</tt></td><td>String buffer</td></tr>
390<tr><td><tt>buflen</tt></td><td>Size of string buffer</td></tr>
391</tbody></table></div>
392<h4>Returns</h4>
393<p>Line read or NULL on eof/error</p>
394<!-- NEW PAGE -->
395<h3 class='title'><a name='cupsFileLock'>cupsFileLock()</a></h3>
396<h4>Description</h4>
397<p>Temporarily lock access to a file.</p>
398<h4>Syntax</h4>
399<pre>
400int
401cupsFileLock(
402 <a href='#cups_file_t'>cups_file_t</a> * fp,
403 int block);
404</pre>
405<h4>Arguments</h4>
406<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
407<thead><tr><th>Name</th><th>Description</th></tr></thead>
408<tbody>
409<tr><td><tt>fp</tt></td><td>File to lock</td></tr>
410<tr><td><tt>block</tt></td><td>1 to wait for the lock, 0 to fail right away</td></tr>
411</tbody></table></div>
412<h4>Returns</h4>
413<p>0 on success, -1 on error</p>
414<!-- NEW PAGE -->
415<h3 class='title'><a name='cupsFileNumber'>cupsFileNumber()</a></h3>
416<h4>Description</h4>
417<p>Return the file descriptor associated with a CUPS file.</p>
418<h4>Syntax</h4>
419<pre>
420int
421cupsFileNumber(
422 <a href='#cups_file_t'>cups_file_t</a> * fp);
423</pre>
424<h4>Arguments</h4>
425<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
426<thead><tr><th>Name</th><th>Description</th></tr></thead>
427<tbody>
428<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
429</tbody></table></div>
430<h4>Returns</h4>
431<p>File descriptor</p>
432<!-- NEW PAGE -->
433<h3 class='title'><a name='cupsFileOpen'>cupsFileOpen()</a></h3>
434<h4>Description</h4>
435<p>Open a CUPS file.</p>
436<h4>Syntax</h4>
437<pre>
438<a href='#cups_file_t'>cups_file_t</a> *
439cupsFileOpen(
440 const char * filename,
441 const char * mode);
442</pre>
443<h4>Arguments</h4>
444<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
445<thead><tr><th>Name</th><th>Description</th></tr></thead>
446<tbody>
447<tr><td><tt>filename</tt></td><td>Name of file</td></tr>
448<tr><td><tt>mode</tt></td><td>Open mode</td></tr>
449</tbody></table></div>
450<h4>Returns</h4>
451<p>CUPS file or NULL</p>
452<!-- NEW PAGE -->
453<h3 class='title'><a name='cupsFileOpenFd'>cupsFileOpenFd()</a></h3>
454<h4>Description</h4>
455<p>Open a CUPS file using a file descriptor.</p>
456<h4>Syntax</h4>
457<pre>
458<a href='#cups_file_t'>cups_file_t</a> *
459cupsFileOpenFd(
460 int fd,
461 const char * mode);
462</pre>
463<h4>Arguments</h4>
464<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
465<thead><tr><th>Name</th><th>Description</th></tr></thead>
466<tbody>
467<tr><td><tt>fd</tt></td><td>File descriptor</td></tr>
468<tr><td><tt>mode</tt></td><td>Open mode</td></tr>
469</tbody></table></div>
470<h4>Returns</h4>
471<p>CUPS file or NULL</p>
472<!-- NEW PAGE -->
473<h3 class='title'><a name='cupsFilePeekChar'>cupsFilePeekChar()</a></h3>
474<h4>Description</h4>
475<p>Peek at the next character from a file.</p>
476<h4>Syntax</h4>
477<pre>
478int
479cupsFilePeekChar(
480 <a href='#cups_file_t'>cups_file_t</a> * fp);
481</pre>
482<h4>Arguments</h4>
483<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
484<thead><tr><th>Name</th><th>Description</th></tr></thead>
485<tbody>
486<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
487</tbody></table></div>
488<h4>Returns</h4>
489<p>Character or -1 on EOF</p>
490<!-- NEW PAGE -->
491<h3 class='title'><a name='cupsFilePrintf'>cupsFilePrintf()</a></h3>
492<h4>Description</h4>
493<p>Write a formatted string.</p>
494<h4>Syntax</h4>
495<pre>
496int
497cupsFilePrintf(
498 <a href='#cups_file_t'>cups_file_t</a> * fp,
499 const char * format,
500 ...);
501</pre>
502<h4>Arguments</h4>
503<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
504<thead><tr><th>Name</th><th>Description</th></tr></thead>
505<tbody>
506<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
507<tr><td><tt>format</tt></td><td>Printf-style format string</td></tr>
508<tr><td><tt>...</tt></td><td>Additional args as necessary</td></tr>
509</tbody></table></div>
510<h4>Returns</h4>
511<p>Number of bytes written or -1</p>
512<!-- NEW PAGE -->
513<h3 class='title'><a name='cupsFilePutChar'>cupsFilePutChar()</a></h3>
514<h4>Description</h4>
515<p>Write a character.</p>
516<h4>Syntax</h4>
517<pre>
518int
519cupsFilePutChar(
520 <a href='#cups_file_t'>cups_file_t</a> * fp,
521 int c);
522</pre>
523<h4>Arguments</h4>
524<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
525<thead><tr><th>Name</th><th>Description</th></tr></thead>
526<tbody>
527<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
528<tr><td><tt>c</tt></td><td>Character to write</td></tr>
529</tbody></table></div>
530<h4>Returns</h4>
531<p>0 on success, -1 on error</p>
532<!-- NEW PAGE -->
533<h3 class='title'><a name='cupsFilePuts'>cupsFilePuts()</a></h3>
534<h4>Description</h4>
535<p>Write a string.</p>
536<h4>Syntax</h4>
537<pre>
538int
539cupsFilePuts(
540 <a href='#cups_file_t'>cups_file_t</a> * fp,
541 const char * s);
542</pre>
543<h4>Arguments</h4>
544<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
545<thead><tr><th>Name</th><th>Description</th></tr></thead>
546<tbody>
547<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
548<tr><td><tt>s</tt></td><td>String to write</td></tr>
549</tbody></table></div>
550<h4>Returns</h4>
551<p>Number of bytes written or -1</p>
552<!-- NEW PAGE -->
553<h3 class='title'><a name='cupsFileRead'>cupsFileRead()</a></h3>
554<h4>Description</h4>
555<p>Read from a file.</p>
556<h4>Syntax</h4>
557<pre>
558<a href='#ssize_t'>ssize_t</a>
559cupsFileRead(
560 <a href='#cups_file_t'>cups_file_t</a> * fp,
561 char * buf,
562 size_t bytes);
563</pre>
564<h4>Arguments</h4>
565<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
566<thead><tr><th>Name</th><th>Description</th></tr></thead>
567<tbody>
568<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
569<tr><td><tt>buf</tt></td><td>Buffer</td></tr>
570<tr><td><tt>bytes</tt></td><td>Number of bytes to read</td></tr>
571</tbody></table></div>
572<h4>Returns</h4>
573<p>Number of bytes read or -1</p>
574<!-- NEW PAGE -->
575<h3 class='title'><a name='cupsFileRewind'>cupsFileRewind()</a></h3>
576<h4>Description</h4>
577<p>Rewind a file.</p>
578<h4>Syntax</h4>
579<pre>
580off_t
581cupsFileRewind(
582 <a href='#cups_file_t'>cups_file_t</a> * fp);
583</pre>
584<h4>Arguments</h4>
585<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
586<thead><tr><th>Name</th><th>Description</th></tr></thead>
587<tbody>
588<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
589</tbody></table></div>
590<h4>Returns</h4>
591<p>New file position or -1</p>
592<!-- NEW PAGE -->
593<h3 class='title'><a name='cupsFileSeek'>cupsFileSeek()</a></h3>
594<h4>Description</h4>
595<p>Seek in a file.</p>
596<h4>Syntax</h4>
597<pre>
598off_t
599cupsFileSeek(
600 <a href='#cups_file_t'>cups_file_t</a> * fp,
601 off_t pos);
602</pre>
603<h4>Arguments</h4>
604<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
605<thead><tr><th>Name</th><th>Description</th></tr></thead>
606<tbody>
607<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
608<tr><td><tt>pos</tt></td><td>Position in file</td></tr>
609</tbody></table></div>
610<h4>Returns</h4>
611<p>New file position or -1</p>
612<!-- NEW PAGE -->
80ca4592 613<h3 class='title'><a name='cupsFileStderr'>cupsFileStderr()</a></h3>
614<h4>Description</h4>
615<p>Just reposition the current pointer, since we have the right
616range...</p>
617<h4>Syntax</h4>
618<pre>
619<a href='#cups_file_t'>cups_file_t</a> *
620cupsFileStderr(void);
621</pre>
622<h4>Arguments</h4>
623<p>None.</p>
624<h4>Returns</h4>
625<p>Return a CUPS file associated with stderr.</p>
626<!-- NEW PAGE -->
627<h3 class='title'><a name='cupsFileStdin'>cupsFileStdin()</a></h3>
628<h4>Description</h4>
629<p>Open file descriptor 2...</p>
630<h4>Syntax</h4>
631<pre>
632<a href='#cups_file_t'>cups_file_t</a> *
633cupsFileStdin(void);
634</pre>
635<h4>Arguments</h4>
636<p>None.</p>
637<h4>Returns</h4>
638<p>Return a CUPS file associated with stdin.</p>
639<!-- NEW PAGE -->
640<h3 class='title'><a name='cupsFileStdout'>cupsFileStdout()</a></h3>
641<h4>Description</h4>
642<p>Open file descriptor 0...</p>
643<h4>Syntax</h4>
644<pre>
645<a href='#cups_file_t'>cups_file_t</a> *
646cupsFileStdout(void);
647</pre>
648<h4>Arguments</h4>
649<p>None.</p>
650<h4>Returns</h4>
651<p>Return a CUPS file associated with stdout.</p>
652<!-- NEW PAGE -->
ef416fc2 653<h3 class='title'><a name='cupsFileTell'>cupsFileTell()</a></h3>
654<h4>Description</h4>
655<p>Return the current file position.</p>
656<h4>Syntax</h4>
657<pre>
658off_t
659cupsFileTell(
660 <a href='#cups_file_t'>cups_file_t</a> * fp);
661</pre>
662<h4>Arguments</h4>
663<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
664<thead><tr><th>Name</th><th>Description</th></tr></thead>
665<tbody>
666<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
667</tbody></table></div>
668<h4>Returns</h4>
669<p>File position</p>
670<!-- NEW PAGE -->
671<h3 class='title'><a name='cupsFileUnlock'>cupsFileUnlock()</a></h3>
672<h4>Description</h4>
673<p>Unlock access to a file.</p>
674<h4>Syntax</h4>
675<pre>
676int
677cupsFileUnlock(
678 <a href='#cups_file_t'>cups_file_t</a> * fp);
679</pre>
680<h4>Arguments</h4>
681<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
682<thead><tr><th>Name</th><th>Description</th></tr></thead>
683<tbody>
684<tr><td><tt>fp</tt></td><td>File to lock</td></tr>
685</tbody></table></div>
686<h4>Returns</h4>
687<p>0 on success, -1 on error</p>
688<!-- NEW PAGE -->
689<h3 class='title'><a name='cupsFileWrite'>cupsFileWrite()</a></h3>
690<h4>Description</h4>
691<p>Write to a file.</p>
692<h4>Syntax</h4>
693<pre>
694<a href='#ssize_t'>ssize_t</a>
695cupsFileWrite(
696 <a href='#cups_file_t'>cups_file_t</a> * fp,
697 const char * buf,
698 size_t bytes);
699</pre>
700<h4>Arguments</h4>
701<div class='table'><table align='center' border='1' width='80%' cellpadding='5' cellspacing='0'>
702<thead><tr><th>Name</th><th>Description</th></tr></thead>
703<tbody>
704<tr><td><tt>fp</tt></td><td>CUPS file</td></tr>
705<tr><td><tt>buf</tt></td><td>Buffer</td></tr>
706<tr><td><tt>bytes</tt></td><td>Number of bytes to write</td></tr>
707</tbody></table></div>
708<h4>Returns</h4>
709<p>Number of bytes written</p>
710<!-- NEW PAGE -->
711<h2 class='title'><a name='STRUCTURES'>Structures</a></h2>
712<ul>
713 <li><a href='#cups_dentry_s'><tt>cups_dentry_s</tt></a> </li>
714</ul>
715<!-- NEW PAGE -->
716<h3 class='title'><a name='cups_dentry_s'>cups_dentry_s</a></h3>
717<h4>Description</h4>
718<p>Directory entry type</p>
719<h4>Definition</h4>
720<pre>
721struct cups_dentry_s
722{
723 struct stat fileinfo;
724 char filename[260];
725};
726</pre>
727<h4>Members</h4>
728<div class='table'><table align='center' border='1' width='80%'>
729<thead><tr><th>Name</th><th>Description</th></tr></thead>
730<tbody>
731<tr><td><tt>fileinfo</tt> </td><td>File information</td></tr>
732<tr><td><tt>filename[260]</tt> </td><td>File name</td></tr>
733</tbody></table></div>
734<!-- NEW PAGE -->
735<h2 class='title'><a name='TYPES'>Types</a></h2>
736<ul>
737 <li><a href='#cups_dentry_t'><tt>cups_dentry_t</tt></a> </li>
738 <li><a href='#cups_dir_t'><tt>cups_dir_t</tt></a> </li>
739 <li><a href='#cups_file_t'><tt>cups_file_t</tt></a> </li>
740</ul>
741<!-- NEW PAGE -->
742<h3 class='title'><a name='cups_dentry_t'>cups_dentry_t</a></h3>
743<h4>Description</h4>
744<p>Directory entry type</p>
745<h4>Definition</h4>
746<pre>
747typedef struct <a href='#cups_dentry_s'>cups_dentry_s</a> cups_dentry_t;
748</pre>
749<!-- NEW PAGE -->
750<h3 class='title'><a name='cups_dir_t'>cups_dir_t</a></h3>
751<h4>Description</h4>
752<p>Directory type</p>
753<h4>Definition</h4>
754<pre>
755typedef struct _cups_dir_s cups_dir_t;
756</pre>
757<!-- NEW PAGE -->
758<h3 class='title'><a name='cups_file_t'>cups_file_t</a></h3>
759<h4>Description</h4>
760<p>CUPS file type</p>
761<h4>Definition</h4>
762<pre>
763typedef struct _cups_file_s cups_file_t;
764</pre>
765</body>
766</html>