|  | # zx_clock_create | 
|  |  | 
|  | ## NAME | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | Create a new clock object. | 
|  |  | 
|  | ## SYNOPSIS | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | ```c | 
|  | #include <zircon/syscalls.h> | 
|  |  | 
|  | zx_status_t zx_clock_create(uint64_t options, | 
|  | const void* args, | 
|  | zx_handle_t* out); | 
|  | ``` | 
|  |  | 
|  | ## RIGHTS | 
|  |  | 
|  | <!-- Updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | None. | 
|  |  | 
|  | ## DESCRIPTION | 
|  |  | 
|  | Creates a new zircon clock object. See [clocks](/docs/reference/kernel_objects/clock.md) for an | 
|  | overview of clock objects. | 
|  |  | 
|  | ### Options | 
|  |  | 
|  | The following options are defined for clock objects: | 
|  |  | 
|  | + **ZX_CLOCK_OPT_MONOTONIC** : When set, creates a clock object that is | 
|  | guaranteed to never run backwards. Monotonic clocks must always move forward. | 
|  | + **ZX_CLOCK_OPT_CONTINUOUS** : When set, creates a clock that is guaranteed to | 
|  | never jump either forwards or backwards. Continuous clocks may only be | 
|  | maintained using frequency adjustments and are, by definition, also monotonic. | 
|  | Attempting to create a clock object with the **ZX_CLOCK_OPT_CONTINUOUS** option | 
|  | specified, but without the **ZX_CLOCK_OPT_MONOTONIC** option specified is an | 
|  | error, which will be signalled with **ZX_ERR_INVALID_ARGS**. | 
|  | + **ZX_CLOCK_OPT_AUTO_START** : When set, creates a clock that is started | 
|  | automatically for the user. You don't need to call zx_clock_update() to start | 
|  | the clock running. Initially, the clock will be a clone of clock monotonic, | 
|  | meaning that the internal transformation from clock monotonic to the newly | 
|  | created synthetic clock is the identity function. The created clock does not | 
|  | have to be created with either the **ZX_CLOCK_OPT_MONOTONIC** or | 
|  | **ZX_CLOCK_OPT_CONTINUOUS** flags set, however. Once created, users may still | 
|  | update the clock within the limits defined by the monotonic and continuous | 
|  | properties specified at create time, the handle rights, and the backstop time | 
|  | of the clock. | 
|  |  | 
|  | ### Arguments | 
|  |  | 
|  | One additional creation-time argument may be specified when configuring the clock, the backstop | 
|  | time. See [clocks](/docs/reference/kernel_objects/clock.md) for more details about backstop times. | 
|  |  | 
|  | In order to configure a backstop time, a user must pass a `zx_clock_create_args_v1_t` structure to | 
|  | the `zx_clock_create` call via the `args` parameter. Additionally, the `options` bits must have | 
|  | `ZX_CLOCK_ARGS_VERSION(1)` set in them. | 
|  |  | 
|  | For example, a user who wished to create a monotonic clock with a backstop time of 5500 might do | 
|  | something like the following. | 
|  |  | 
|  | ```c | 
|  | #include <zircon/syscalls.h> | 
|  | #include <zircon/syscalls/clock.h> | 
|  |  | 
|  | zx_handle_t MakeAClock() { | 
|  | zx_clock_create_args_v1_t args; | 
|  | zx_handle_t the_clock; | 
|  | zx_status_t status; | 
|  |  | 
|  | args.backstop_time = 5500; | 
|  | status = zx_clock_create(ZX_CLOCK_ARGS_VERSION(1) | ZX_CLOCK_OPT_MONOTONIC, &args, &the_clock); | 
|  | if (status != ZX_OK) { | 
|  | // Log the error | 
|  | return ZX_HANDLE_INVALID; | 
|  | } | 
|  |  | 
|  | return the_clock; | 
|  | } | 
|  | ``` | 
|  |  | 
|  | Users do not have to supply an arguments structure. If an explicit backstop is not required, users | 
|  | may omit the version bits from the options parameter and simply pass nullptr for args. | 
|  |  | 
|  | ## RETURN VALUE | 
|  |  | 
|  | On success, returns **ZX_OK** along with a new clock object via the *out* | 
|  | handle. Handles to newly created clock objects will have the **ZX_RIGHT_READ** | 
|  | and **ZX_RIGHT_WRITE** rights assigned to them. | 
|  |  | 
|  | ## ERRORS | 
|  |  | 
|  | - **ZX_ERR_INVALID_ARGS** : An invalid option flag was specified, a bad args | 
|  | structure version or pointer was passed, **ZX_CLOCK_OPT_CONTINUOUS** was | 
|  | specified without also specifying **ZX_CLOCK_OPT_MONOTONIC**, or the initial | 
|  | backstop time of an automatically started clock is after the current clock | 
|  | monotonic time. | 
|  | - **ZX_ERR_NO_MEMORY**  Failure due to lack of memory. | 
|  |  | 
|  | ## SEE ALSO | 
|  |  | 
|  | - [clocks] | 
|  | - [`zx_clock_get_details()`] | 
|  | - [`zx_clock_read()`] | 
|  | - [`zx_clock_update()`] | 
|  |  | 
|  | <!-- References updated by update-docs-from-fidl, do not edit. --> | 
|  |  | 
|  | [clocks]: /docs/reference/kernel_objects/clock.md | 
|  | [`zx_clock_get_details()`]: clock_get_details.md | 
|  | [`zx_clock_read()`]: clock_read.md | 
|  | [`zx_clock_update()`]: clock_update.md |