bglibs: obuf: Output Buffer Management

- Main Page
- Modules
- Data Structures
- Files
- Directories
- Related Pages
- Examples

# obuf: Output Buffer Management

## Data Structures
struct | obuf
## Defines
#define | OBUF_CREATE O_CREAT
#define | OBUF_EXCLUSIVE O_EXCL
#define | OBUF_TRUNCATE O_TRUNC
#define | OBUF_APPEND O_APPEND
#define | obuf_error(out) iobuf_error(&(out)->io)
#define | obuf_closed(out) iobuf_closed(&(out)->io)
#define | obuf_timedout(out) iobuf_timedout(&((out)->io))
#define | obuf_rewind(out) obuf_seek(out,0)
#define | obuf_tell(out) ((out)->io.offset+(out)->bufpos)
#define | obuf_puts(out, str) obuf_write(out,str,strlen(str))
#define | obuf_putstr(out, str) obuf_write(out,(str)->s,(str)->len)
## Typedefs
typedef int(*) | obuf_fn (int, const void *, unsigned long)
typedef obuf | obuf
## Functions
int | obuf_init (obuf *out, int fd, obuf_fn fn, unsigned flags, unsigned bufsize)
int | obuf_open (obuf *out, const char *filename, int oflags, int mode, unsigned bufsize)
int | obuf_close (obuf *out)
int | obuf_flush (obuf *out)
int | obuf_sync (obuf *out)
int | obuf_write_large (obuf *out, const char *data, unsigned datalen)
int | obuf_write (obuf *out, const char *data, unsigned datalen)
int | obuf_seek (obuf *out, unsigned offset)
int | obuf_pad (obuf *out, unsigned width, char ch)
int | obuf_endl (obuf *out)
int | obuf_putc (obuf *out, char ch)
int | obuf_put2s (obuf *out, const char *s1, const char *s2)
int | obuf_put3s (obuf *out, const char *s1, const char *s2, const char *s3)
int | obuf_put4s (obuf *out, const char *s1, const char *s2, const char *s3, const char *s4)
int | obuf_put5s (obuf *out, const char *s1, const char *s2, const char *s3, const char *s4, const char *s5)
int | obuf_put6s (obuf *out, const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6)
int | obuf_put7s (obuf *out, const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7)
int | obuf_putns (obuf *out, unsigned int count,...)
int | obuf_putf (obuf *out, const char *format,...)
int | obuf_putfv (obuf *out, const char *format, va_list ap)
int | obuf_putsflush (obuf *out, const char *s)
int | obuf_puti (obuf *out, long data)
int | obuf_putiw (obuf *out, long data, unsigned width, char pad)
int | obuf_putu (obuf *out, unsigned long data)
int | obuf_putuw (obuf *out, unsigned long data, unsigned width, char pad)
int | obuf_putill (obuf *out, long long data)
int | obuf_putiwll (obuf *out, long long data, unsigned width, char pad)
int | obuf_putull (obuf *out, unsigned long long data)
int | obuf_putuwll (obuf *out, unsigned long long data, unsigned width, char pad)
int | obuf_putx (obuf *out, unsigned long data)
int | obuf_putxw (obuf *out, unsigned long data, unsigned width, char pad)
int | obuf_putX (obuf *out, unsigned long data)
int | obuf_putXw (obuf *out, unsigned long data, unsigned width, char pad)
int | obuf_putxll (obuf *out, unsigned long long data)
int | obuf_putxwll (obuf *out, unsigned long long data, unsigned width, char pad)
int | obuf_putXll (obuf *out, unsigned long long data)
int | obuf_putXwll (obuf *out, unsigned long long data, unsigned width, char pad)
int | obuf_putsnumw (obuf *out, long num, unsigned width, char pad, unsigned base, const char *digits)
int | obuf_putunumw (obuf *out, unsigned long num, unsigned width, char pad, unsigned base, const char *digits)
int | obuf_putsllnumw (obuf *out, long long num, unsigned width, char pad, unsigned base, const char *digits)
int | obuf_putullnumw (obuf *out, unsigned long long num, unsigned width, char pad, unsigned base, const char *digits)
int | obuf_putnetstring (obuf *out, const char *data, unsigned datalen)
int | obuf_sign_pad (obuf *out, int sign, unsigned width, char pad)
## Variables
obuf | outbuf
obuf | errbuf
const char | obuf_dec_digits [10]
const char | obuf_hex_lcase_digits [16]
const char | obuf_hex_ucase_digits [16]

## Detailed Description

Calling Convention

Unless otherwise specified, the return value is non-zero (true) if the entire requested operation completed, and `0` (false) otherwise.

## Define Documentation

#define OBUF_APPEND O_APPEND

All writes go to the end of the file.

#define obuf_closed | ( | out |  | ) | iobuf_closed(&(out)->io)

Test if the `obuf` has been closed.

#define OBUF_CREATE O_CREAT

Create the file if it does not already exist.

#define obuf_error | ( | out |  | ) | iobuf_error(&(out)->io)

Test if the `obuf` is in an error state.

#define OBUF_EXCLUSIVE O_EXCL

If `OBUF_CREATE` is set, fail to create the file if it already exists.

#define obuf_puts | ( | out,
|  | str |  | ) | obuf_write(out,str,strlen(str))

Write a C string to the `obuf`

#define obuf_putstr | ( | out,
|  | str |  | ) | obuf_write(out,(str)->s,(str)->len)

Write a dynamic string to the `iobuf`

#define obuf_rewind | ( | out |  | ) | obuf_seek(out,0)

Set the effective write position to the start of the file.

#define obuf_tell | ( | out |  | ) | ((out)->io.offset+(out)->bufpos)

Look up the current effective write position.

#define obuf_timedout | ( | out |  | ) | iobuf_timedout(&((out)->io))

Test if the last `obuf` write timed out.

#define OBUF_TRUNCATE O_TRUNC

If the file exists, truncate it to length 0.

## Typedef Documentation

typedef struct obuf obuf

Output specific buffer typedef.

typedef int(*) obuf_fn(int, const void *, unsigned long)

`obuf` write function pointer prototype.

## Function Documentation

int obuf_close | ( | obuf * | out | ) |

Flush and close the `obuf`

int obuf_endl | ( | obuf * | out | ) |

Write a newline to the `obuf` and flush it.

int obuf_flush | ( | obuf * | out | ) |

Write all pending data in the `obuf` to the file descriptor.

int obuf_init | ( | obuf * | out,
|  | int | fd,
|  | obuf_fn | fn,
|  | unsigned | flags,
|  | unsigned | bufsize |
| ) |  |  |

Initialize an `obuf` from an already-opened file descriptor.

int obuf_open | ( | obuf * | out,
|  | const char * | filename,
|  | int | oflags,
|  | int | mode,
|  | unsigned | bufsize |
| ) |  |  |

Initialize an `obuf` by opening a file for writing.

int obuf_pad | ( | obuf * | out,
|  | unsigned | width,
|  | char | ch |
| ) |  |  |

Pad the output with `width` instances of the single character `ch`.

int obuf_put2s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2 |
| ) |  |  |

Write 2 C strings to the `obuf`

int obuf_put3s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2,
|  | const char * | s3 |
| ) |  |  |

Write 3 C strings to the `obuf`

int obuf_put4s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2,
|  | const char * | s3,
|  | const char * | s4 |
| ) |  |  |

Write 4 C strings to the `obuf`

int obuf_put5s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2,
|  | const char * | s3,
|  | const char * | s4,
|  | const char * | s5 |
| ) |  |  |

Write 5 C strings to the `obuf`

int obuf_put6s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2,
|  | const char * | s3,
|  | const char * | s4,
|  | const char * | s5,
|  | const char * | s6 |
| ) |  |  |

Write 6 C strings to the `obuf`

int obuf_put7s | ( | obuf * | out,
|  | const char * | s1,
|  | const char * | s2,
|  | const char * | s3,
|  | const char * | s4,
|  | const char * | s5,
|  | const char * | s6,
|  | const char * | s7 |
| ) |  |  |

Write 7 C strings to the `obuf`

int obuf_putc | ( | obuf * | out,
|  | char | ch |
| ) |  |  |

Write a single character to the `obuf`

int obuf_putf | ( | obuf * | out,
|  | const char * | format,
|  |  | ... |
| ) |  |  |

Write a formatted string using `fmt_multi` from variable arguments

Examples:
  adt/ghash_test.c.

int obuf_putfv | ( | obuf * | out,
|  | const char * | format,
|  | va_list | ap |
| ) |  |  |

Write a formatted string using `fmt_multi` from a `va_list`

int obuf_puti | ( | obuf * | out,
|  | long | data |
| ) |  |  |

Write a signed integer as decimal to the `obuf`.

Examples:
  adt/gqueue_test.c, and adt/gstack_test.c.

int obuf_putill | ( | obuf * | out,
|  | long long | data |
| ) |  |  |

Write a signed long long integer as decimal to the `obuf`.

int obuf_putiw | ( | obuf * | out,
|  | long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write a signed integer as decimal to the `obuf` with padding.

int obuf_putiwll | ( | obuf * | out,
|  | long long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write a signed long long integer as decimal to the `obuf` with padding.

int obuf_putnetstring | ( | obuf * | out,
|  | const char * | data,
|  | unsigned | datalen |
| ) |  |  |

Write the binary block to the `obuf` as a "netstring".

int obuf_putns | ( | obuf * | out,
|  | unsigned int | count,
|  |  | ... |
| ) |  |  |

Write N C strings to the `obuf`

int obuf_putsflush | ( | obuf * | out,
|  | const char * | str |
| ) |  |  |

Write a C string to the `obuf` and flush it.

int obuf_putsllnumw | ( | obuf * | out,
|  | long long | data,
|  | unsigned | width,
|  | char | pad,
|  | unsigned | base,
|  | const char * | digits |
| ) |  |  |

Write a signed long long integer to the `obuf` with optional padding.

int obuf_putsnumw | ( | obuf * | out,
|  | long | data,
|  | unsigned | width,
|  | char | pad,
|  | unsigned | base,
|  | const char * | digits |
| ) |  |  |

Write a signed integer to the `obuf` with optional padding.

int obuf_putu | ( | obuf * | out,
|  | unsigned long | data |
| ) |  |  |

Write an unsigned integer as decimal to the `obuf`.

int obuf_putull | ( | obuf * | out,
|  | unsigned long long | data |
| ) |  |  |

Write an unsigned long long integer as decimal to the `obuf`.

int obuf_putullnumw | ( | obuf * | out,
|  | unsigned long long | data,
|  | unsigned | width,
|  | char | pad,
|  | unsigned | base,
|  | const char * | digits |
| ) |  |  |

Write an unsigned long long integer to the `obuf` with optional padding.

int obuf_putunumw | ( | obuf * | out,
|  | unsigned long | data,
|  | unsigned | width,
|  | char | pad,
|  | unsigned | base,
|  | const char * | digits |
| ) |  |  |

Write an unsigned integer to the `obuf` with optional padding.

int obuf_putuw | ( | obuf * | out,
|  | unsigned long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned integer as decimal to the `obuf` with padding.

int obuf_putuwll | ( | obuf * | out,
|  | unsigned long long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned long long integer as decimal to the `obuf` with padding.

int obuf_putX | ( | obuf * | out,
|  | unsigned long | data |
| ) |  |  |

Write an unsigned integer as (upper-case) hexadecimal to the `obuf`.

int obuf_putx | ( | obuf * | out,
|  | unsigned long | data |
| ) |  |  |

Write an unsigned integer as (lower-case) hexadecimal to the `obuf`.

int obuf_putXll | ( | obuf * | out,
|  | unsigned long long | data |
| ) |  |  |

Write an unsigned long long integer as (upper-case) hexadecimal to the `obuf`.

int obuf_putxll | ( | obuf * | out,
|  | unsigned long long | data |
| ) |  |  |

Write an unsigned long long integer as (lower-case) hexadecimal to the `obuf`.

int obuf_putXw | ( | obuf * | out,
|  | unsigned long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned integer as (upper-case) hexadecimal to the `obuf` with padding.

int obuf_putxw | ( | obuf * | out,
|  | unsigned long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned integer as (lower-case) hexadecimal to the `obuf` with padding.

int obuf_putXwll | ( | obuf * | out,
|  | unsigned long long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned long long integer as (upper-case) hexadecimal to the `obuf` with padding.

int obuf_putxwll | ( | obuf * | out,
|  | unsigned long long | data,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Write an unsigned long long integer as (lower-case) hexadecimal to the `obuf` with padding.

int obuf_seek | ( | obuf * | out,
|  | unsigned | offset |
| ) |  |  |

Set the effective write position.

int obuf_sign_pad | ( | obuf * | out,
|  | int | sign,
|  | unsigned | width,
|  | char | pad |
| ) |  |  |

Pad the output with `width` instances of the single character `ch`, preceded by an optional negative sign at an appropriate place.

If the pad character is `'0'` then any negative sign is placed as the first character, followed by padding. Otherwise, it is preceded by the padding.

int obuf_sync | ( | obuf * | out | ) |

Flush the `obuf` and then `fsync` the file descriptor.

int obuf_write | ( | obuf * | out,
|  | const char * | data,
|  | unsigned | datalen |
| ) |  |  |

Write a block of data to the `obuf`

int obuf_write_large | ( | obuf * | out,
|  | const char * | data,
|  | unsigned | datalen |
| ) |  |  |

Write a large block of data to the `obuf`, avoiding copying.

## Variable Documentation

obuf errbuf

Output buffer for `stderr`

obuf outbuf

Output buffer for `stdout`

Examples:
  adt/ghash_test.c, adt/gqueue_test.c, and adt/gstack_test.c.