File and Directory APIs

Headers cups/file.h
cups/dir.h
Library -lcups
See Also Programming: Introduction to CUPS Programming
Programming: CUPS API

Contents

Overview

The CUPS file and directory APIs provide portable interfaces for manipulating files and listing files and directories. Unlike stdio FILE streams, the cupsFile 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 cupsFile functions.

The cupsDir 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.

Functions

 CUPS 1.2/OS X 10.5 cupsDirClose

Close a directory.

void cupsDirClose (
    cups_dir_t *dp
);

Parameters

dp
Directory pointer

 CUPS 1.2/OS X 10.5 cupsDirOpen

Open a directory.

cups_dir_t *cupsDirOpen (
    const char *directory
);

Parameters

directory
Directory name

Return Value

Directory pointer or NULL if the directory could not be opened.

 CUPS 1.2/OS X 10.5 cupsDirRead

Read the next directory entry.

cups_dentry_t *cupsDirRead (
    cups_dir_t *dp
);

Parameters

dp
Directory pointer

Return Value

Directory entry or NULL when there are no more

 CUPS 1.2/OS X 10.5 cupsDirRewind

Rewind to the start of the directory.

void cupsDirRewind (
    cups_dir_t *dp
);

Parameters

dp
Directory pointer

 CUPS 1.2/OS X 10.5 cupsFileClose

Close a CUPS file.

int cupsFileClose (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

0 on success, -1 on error

 CUPS 1.2/OS X 10.5 cupsFileCompression

Return whether a file is compressed.

int cupsFileCompression (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

CUPS_FILE_NONE or CUPS_FILE_GZIP

 CUPS 1.2/OS X 10.5 cupsFileEOF

Return the end-of-file status.

int cupsFileEOF (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

1 on end of file, 0 otherwise

 CUPS 1.2/OS X 10.5 cupsFileFind

Find a file using the specified path.

const char *cupsFileFind (
    const char *filename,
    const char *path,
    int executable,
    char *buffer,
    int bufsize
);

Parameters

filename
File to find
path
Colon/semicolon-separated path
executable
1 = executable files, 0 = any file/dir
buffer
Filename buffer
bufsize
Size of filename buffer

Return Value

Full path to file or NULL if not found

Discussion

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.

 CUPS 1.2/OS X 10.5 cupsFileFlush

Flush pending output.

int cupsFileFlush (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

0 on success, -1 on error

 CUPS 1.2/OS X 10.5 cupsFileGetChar

Get a single character from a file.

int cupsFileGetChar (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

Character or -1 on end of file

 CUPS 1.2/OS X 10.5 cupsFileGetConf

Get a line from a configuration file.

char *cupsFileGetConf (
    cups_file_t *fp,
    char *buf,
    size_t buflen,
    char **value,
    int *linenum
);

Parameters

fp
CUPS file
buf
String buffer
buflen
Size of string buffer
value
Pointer to value
linenum
Current line number

Return Value

Line read or NULL on end of file or error

 CUPS 1.2/OS X 10.5 cupsFileGetLine

Get a CR and/or LF-terminated line that may contain binary data.

size_t cupsFileGetLine (
    cups_file_t *fp,
    char *buf,
    size_t buflen
);

Parameters

fp
File to read from
buf
Buffer
buflen
Size of buffer

Return Value

Number of bytes on line or 0 on end of file

Discussion

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.

 CUPS 1.2/OS X 10.5 cupsFileGets

Get a CR and/or LF-terminated line.

char *cupsFileGets (
    cups_file_t *fp,
    char *buf,
    size_t buflen
);

Parameters

fp
CUPS file
buf
String buffer
buflen
Size of string buffer

Return Value

Line read or NULL on end of file or error

 CUPS 1.2/OS X 10.5 cupsFileLock

Temporarily lock access to a file.

int cupsFileLock (
    cups_file_t *fp,
    int block
);

Parameters

fp
CUPS file
block
1 to wait for the lock, 0 to fail right away

Return Value

0 on success, -1 on error

 CUPS 1.2/OS X 10.5 cupsFileNumber

Return the file descriptor associated with a CUPS file.

int cupsFileNumber (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

File descriptor

 CUPS 1.2/OS X 10.5 cupsFileOpen

Open a CUPS file.

cups_file_t *cupsFileOpen (
    const char *filename,
    const char *mode
);

Parameters

filename
Name of file
mode
Open mode

Return Value

CUPS file or NULL if the file or socket cannot be opened

Discussion

The "mode" parameter can be "r" to read, "w" to write, overwriting any existing file, "a" to append to an existing file or create a new file, or "s" to open a socket connection.

When opening for writing ("w"), an optional number from 1 to 9 can be supplied which enables Flate compression of the file. Compression is not supported for the "a" (append) mode.

When opening a socket connection, the filename is a string of the form "address:port" or "hostname:port". The socket will make an IPv4 or IPv6 connection as needed, generally preferring IPv6 connections when there is a choice.

 CUPS 1.2/OS X 10.5 cupsFileOpenFd

Open a CUPS file using a file descriptor.

cups_file_t *cupsFileOpenFd (
    int fd,
    const char *mode
);

Parameters

fd
File descriptor
mode
Open mode

Return Value

CUPS file or NULL if the file could not be opened

Discussion

The "mode" parameter can be "r" to read, "w" to write, "a" to append, or "s" to treat the file descriptor as a bidirectional socket connection.

When opening for writing ("w"), an optional number from 1 to 9 can be supplied which enables Flate compression of the file. Compression is not supported for the "a" (append) mode.

 CUPS 1.2/OS X 10.5 cupsFilePeekChar

Peek at the next character from a file.

int cupsFilePeekChar (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

Character or -1 on end of file

 CUPS 1.2/OS X 10.5 cupsFilePrintf

Write a formatted string.

int cupsFilePrintf (
    cups_file_t *fp,
    const char *format,
    ...
);

Parameters

fp
CUPS file
format
Printf-style format string
...
Additional args as necessary

Return Value

Number of bytes written or -1 on error

 CUPS 1.2/OS X 10.5 cupsFilePutChar

Write a character.

int cupsFilePutChar (
    cups_file_t *fp,
    int c
);

Parameters

fp
CUPS file
c
Character to write

Return Value

0 on success, -1 on error

 CUPS 1.4/OS X 10.6 cupsFilePutConf

Write a configuration line.

ssize_t cupsFilePutConf (
    cups_file_t *fp,
    const char *directive,
    const char *value
);

Parameters

fp
CUPS file
directive
Directive
value
Value

Return Value

Number of bytes written or -1 on error

Discussion

This function handles any comment escaping of the value.

 CUPS 1.2/OS X 10.5 cupsFilePuts

Write a string.

int cupsFilePuts (
    cups_file_t *fp,
    const char *s
);

Parameters

fp
CUPS file
s
String to write

Return Value

Number of bytes written or -1 on error

Discussion

Like the fputs function, no newline is appended to the string.

 CUPS 1.2/OS X 10.5 cupsFileRead

Read from a file.

ssize_t cupsFileRead (
    cups_file_t *fp,
    char *buf,
    size_t bytes
);

Parameters

fp
CUPS file
buf
Buffer
bytes
Number of bytes to read

Return Value

Number of bytes read or -1 on error

 CUPS 1.2/OS X 10.5 cupsFileRewind

Set the current file position to the beginning of the file.

off_t cupsFileRewind (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

New file position or -1 on error

 CUPS 1.2/OS X 10.5 cupsFileSeek

Seek in a file.

off_t cupsFileSeek (
    cups_file_t *fp,
    off_t pos
);

Parameters

fp
CUPS file
pos
Position in file

Return Value

New file position or -1 on error

 CUPS 1.2/OS X 10.5 cupsFileStderr

Return a CUPS file associated with stderr.

cups_file_t *cupsFileStderr (void);

Return Value

CUPS file

 CUPS 1.2/OS X 10.5 cupsFileStdin

Return a CUPS file associated with stdin.

cups_file_t *cupsFileStdin (void);

Return Value

CUPS file

 CUPS 1.2/OS X 10.5 cupsFileStdout

Return a CUPS file associated with stdout.

cups_file_t *cupsFileStdout (void);

Return Value

CUPS file

 CUPS 1.2/OS X 10.5 cupsFileTell

Return the current file position.

off_t cupsFileTell (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

File position

 CUPS 1.2/OS X 10.5 cupsFileUnlock

Unlock access to a file.

int cupsFileUnlock (
    cups_file_t *fp
);

Parameters

fp
CUPS file

Return Value

0 on success, -1 on error

 CUPS 1.2/OS X 10.5 cupsFileWrite

Write to a file.

ssize_t cupsFileWrite (
    cups_file_t *fp,
    const char *buf,
    size_t bytes
);

Parameters

fp
CUPS file
buf
Buffer
bytes
Number of bytes to write

Return Value

Number of bytes written or -1 on error

Data Types

cups_dentry_t

Directory entry type

typedef struct cups_dentry_s cups_dentry_t;

cups_dir_t

Directory type

typedef struct _cups_dir_s cups_dir_t;

cups_file_t

CUPS file type

typedef struct _cups_file_s cups_file_t;

Structures

cups_dentry_s

Directory entry type

struct cups_dentry_s {
    struct stat fileinfo;
    char filename[260];
};

Members

fileinfo
File information
filename[260]
File name