---
name: "clock"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/clock/3"
---

# clock(3)

determine processor time

## NAME

clock - determine processor time

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <time.h>
```

**clock\_t clock(void);**

## DESCRIPTION

The **clock**() function returns an approximation of processor time used by the program.

## RETURN VALUE

The value returned is the CPU time used so far as a *clock\_t*; to get the number of seconds used, divide by **CLOCKS\_PER\_SEC**. If the processor time used is not available or its value cannot be represented, the function returns the value *(clock\_t) -1*.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **clock**() | Thread safety | MT-Safe |

## VERSIONS

XSI requires that **CLOCKS\_PER\_SEC** equals 1000000 independent of the actual resolution.

On several other implementations, the value returned by **clock**() also includes the times of any children whose status has been collected via [**wait**(2)](/wait/2.md) (or another wait-type call). Linux does not include the times of waited-for children in the value returned by **clock**(). The [**times**(2)](/times/2.md) function, which explicitly returns (separate) information about the caller and its children, may be preferable.

## STANDARDS

C11, POSIX.1-2008.

## HISTORY

POSIX.1-2001, C89.

In glibc 2.17 and earlier, **clock**() was implemented on top of [**times**(2)](/times/2.md). For improved accuracy, since glibc 2.18, it is implemented on top of [**clock\_gettime**(2)](/clock_gettime/2.md) (using the **CLOCK\_PROCESS\_CPUTIME\_ID** clock).

## NOTES

The C standard allows for arbitrary values at the start of the program; subtract the value returned from a call to **clock**() at the start of the program to get maximum portability.

Note that the time can wrap around. On a 32-bit system where **CLOCKS\_PER\_SEC** equals 1000000 this function will return the same value approximately every 72 minutes.

## SEE ALSO

[**clock\_gettime**(2)](/clock_gettime/2.md), [**getrusage**(2)](/getrusage/2.md), [**times**(2)](/times/2.md)
