123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- ARCHIVE_WRITE_OPEN(3) manual page
- == NAME ==
- '''archive_write_open''',
- '''archive_write_open2''',
- '''archive_write_open_fd''',
- '''archive_write_open_FILE''',
- '''archive_write_open_filename''',
- '''archive_write_open_memory'''
- - functions for creating archives
- == LIBRARY ==
- Streaming Archive Library (libarchive, -larchive)
- == SYNOPSIS ==
- '''<nowiki>#include <archive.h></nowiki>'''
- <br>
- ''int''
- <br>
- '''archive_write_open'''(''struct archive *'', ''void *client_data'', ''archive_open_callback *'', ''archive_write_callback *'', ''archive_close_callback *'');
- <br>
- ''int''
- <br>
- '''archive_write_open2'''(''struct archive *'', ''void *client_data'', ''archive_open_callback *'', ''archive_write_callback *'', ''archive_close_callback *'', ''archive_free_callback *'');
- <br>
- ''int''
- <br>
- '''archive_write_open_fd'''(''struct archive *'', ''int fd'');
- <br>
- ''int''
- <br>
- '''archive_write_open_FILE'''(''struct archive *'', ''FILE *file'');
- <br>
- ''int''
- <br>
- '''archive_write_open_filename'''(''struct archive *'', ''const char *filename'');
- <br>
- ''int''
- <br>
- '''archive_write_open_memory'''(''struct archive *'', ''void *buffer'', ''size_t bufferSize'', ''size_t *outUsed'');
- == DESCRIPTION ==
- <dl>
- <dt>'''archive_write_open'''()</dt><dd>
- Freeze the settings, open the archive, and prepare for writing entries.
- This is the most generic form of this function, which accepts
- pointers to three callback functions which will be invoked by
- the compression layer to write the constructed archive.
- This does not alter the default archive padding.
- </dd><dt>'''archive_write_open2'''()</dt><dd>
- Same as
- '''archive_write_open'''()
- with an additional fourth free callback. This function should be preferred to
- '''archive_write_open'''().
- </dd><dt>'''archive_write_open_fd'''()</dt><dd>
- A convenience form of
- '''archive_write_open'''()
- that accepts a file descriptor.
- The
- '''archive_write_open_fd'''()
- function is safe for use with tape drives or other
- block-oriented devices.
- </dd><dt>'''archive_write_open_FILE'''()</dt><dd>
- A convenience form of
- '''archive_write_open'''()
- that accepts a
- ''FILE *''
- pointer.
- Note that
- '''archive_write_open_FILE'''()
- is not safe for writing to tape drives or other devices
- that require correct blocking.
- </dd><dt>'''archive_write_open_file'''()</dt><dd>
- A deprecated synonym for
- '''archive_write_open_filename'''().
- </dd><dt>'''archive_write_open_filename'''()</dt><dd>
- A convenience form of
- '''archive_write_open'''()
- that accepts a filename.
- A NULL argument indicates that the output should be written to standard output;
- an argument of
- "-"
- will open a file with that name.
- If you have not invoked
- '''archive_write_set_bytes_in_last_block'''(),
- then
- '''archive_write_open_filename'''()
- will adjust the last-block padding depending on the file:
- it will enable padding when writing to standard output or
- to a character or block device node, it will disable padding otherwise.
- You can override this by manually invoking
- '''archive_write_set_bytes_in_last_block'''()
- before calling
- '''archive_write_open2'''().
- The
- '''archive_write_open_filename'''()
- function is safe for use with tape drives or other
- block-oriented devices.
- </dd><dt>'''archive_write_open_memory'''()</dt><dd>
- A convenience form of
- '''archive_write_open2'''()
- that accepts a pointer to a block of memory that will receive
- the archive.
- The final
- ''size_t *''
- argument points to a variable that will be updated
- after each write to reflect how much of the buffer
- is currently in use.
- You should be careful to ensure that this variable
- remains allocated until after the archive is
- closed.
- This function will disable padding unless you
- have specifically set the block size.
- </dd></dl>
- More information about the
- ''struct'' archive
- object and the overall design of the library can be found in the
- [[ManPageLibarchive3]]
- overview.
- Note that the convenience forms above vary in how
- they block the output.
- See
- [[ManPageArchiveWriteBlocksize3]]
- if you need to control the block size used for writes
- or the end-of-file padding behavior.
- == CLIENT CALLBACKS ==
- To use this library, you will need to define and register
- callback functions that will be invoked to write data to the
- resulting archive.
- These functions are registered by calling
- '''archive_write_open2'''():
- <ul>
- <li>
- ''typedef int''
- '''archive_open_callback'''(''struct archive *'', ''void *client_data'')
- </li></ul>
- The open callback is invoked by
- '''archive_write_open'''().
- It should return
- '''ARCHIVE_OK'''
- if the underlying file or data source is successfully
- opened.
- If the open fails, it should call
- '''archive_set_error'''()
- to register an error code and message and return
- '''ARCHIVE_FATAL'''.
- Please note that if open fails, close is not called and resources must be
- freed inside the open callback or with the free callback.
- <ul>
- <li>
- ''typedef la_ssize_t''
- '''archive_write_callback'''(''struct archive *'', ''void *client_data'', ''const void *buffer'', ''size_t length'')
- </li></ul>
- The write callback is invoked whenever the library
- needs to write raw bytes to the archive.
- For correct blocking, each call to the write callback function
- should translate into a single
- [[write(2)|http://www.freebsd.org/cgi/man.cgi?query=write&sektion=2]]
- system call.
- This is especially critical when writing archives to tape drives.
- On success, the write callback should return the
- number of bytes actually written.
- On error, the callback should invoke
- '''archive_set_error'''()
- to register an error code and message and return -1.
- <ul>
- <li>
- ''typedef int''
- '''archive_close_callback'''(''struct archive *'', ''void *client_data'')
- </li></ul>
- The close callback is invoked by archive_close when
- the archive processing is complete. If the open callback fails, the close
- callback is not invoked.
- The callback should return
- '''ARCHIVE_OK'''
- on success.
- On failure, the callback should invoke
- '''archive_set_error'''()
- to register an error code and message and
- return
- '''ARCHIVE_FATAL'''.
- <ul>
- <li>
- ''typedef int''
- '''archive_free_callback'''(''struct archive *'', ''void *client_data'')
- </li></ul>
- The free callback is always invoked on archive_free.
- The return code of this callback is not processed.
- Note that if the client-provided write callback function
- returns a non-zero value, that error will be propagated back to the caller
- through whatever API function resulted in that call, which
- may include
- '''archive_write_header'''(),
- '''archive_write_data'''(),
- '''archive_write_close'''(),
- '''archive_write_finish'''(),
- or
- '''archive_write_free'''().
- The client callback can call
- '''archive_set_error'''()
- to provide values that can then be retrieved by
- '''archive_errno'''()
- and
- '''archive_error_string'''().
- == RETURN VALUES ==
- These functions return
- '''ARCHIVE_OK'''
- on success, or
- '''ARCHIVE_FATAL'''.
- == ERRORS ==
- Detailed error codes and textual descriptions are available from the
- '''archive_errno'''()
- and
- '''archive_error_string'''()
- functions.
- == SEE ALSO ==
- [[ManPageBsdtar1]],
- [[ManPageArchiveWrite3]],
- [[ManPageArchiveWriteBlocksize3]],
- [[ManPageArchiveWriteFilter3]],
- [[ManPageArchiveWriteFormat3]],
- [[ManPageArchiveWriteNew3]],
- [[ManPageArchiveWriteSetOptions3]],
- [[ManPageLibarchive3]],
- [[ManPageCpio5]],
- [[ManPageMtree5]],
- [[ManPageTar5]]
|