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

# futimesat(2)

change timestamps of a file relative to a directory file descriptor

## NAME

futimesat - change timestamps of a file relative to a directory file descriptor

## LIBRARY

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

## SYNOPSIS

```
#include <fcntl.h>            /* Definition of AT_* constants */
#include <sys/time.h>
```

**\[\[deprecated\]\] int futimesat(int** *dirfd***, const char \****path***,**                              **const struct timeval** *times***\[2\]);**

Feature Test Macro Requirements for glibc (see [**feature\_test\_macros**(7)](/feature_test_macros/7.md)):

**futimesat**():

```
    _GNU_SOURCE
```

## DESCRIPTION

This system call is obsolete. Use [**utimensat**(2)](/utimensat/2.md) instead.

The **futimesat**() system call operates in exactly the same way as [**utimes**(2)](/utimes/2.md), except for the differences described in this manual page.

If *path* is relative, then it is interpreted relative to the directory referred to by the file descriptor *dirfd* (rather than relative to the current working directory of the calling process, as is done by [**utimes**(2)](/utimes/2.md) for a relative pathname).

If *path* is relative and *dirfd* is the special value **AT\_FDCWD**, then *path* is interpreted relative to the current working directory of the calling process (like [**utimes**(2)](/utimes/2.md)).

If *path* is absolute, then *dirfd* is ignored. (See [**openat**(2)](/openat/2.md) for an explanation of why the *dirfd* argument is useful.)

## RETURN VALUE

On success, **futimesat**() returns a 0. On error, -1 is returned and *errno* is set to indicate the error.

## ERRORS

The same errors that occur for [**utimes**(2)](/utimes/2.md) can also occur for **futimesat**(). The following additional errors can occur for **futimesat**():

- **EBADF**

  *path* is relative but *dirfd* is neither **AT\_FDCWD** nor a valid file descriptor.

- **ENOTDIR**

  *path* is relative and *dirfd* is a file descriptor referring to a file other than a directory.

## VERSIONS

### glibc

If *path* is NULL, then the glibc **futimesat**() wrapper function updates the times for the file referred to by *dirfd*.

## STANDARDS

None.

## HISTORY

Linux 2.6.16, glibc 2.4.

It was implemented from a specification that was proposed for POSIX.1, but that specification was replaced by the one for [**utimensat**(2)](/utimensat/2.md).

A similar system call exists on Solaris.

## NOTES

## SEE ALSO

[**stat**(2)](/stat/2.md), [**utimensat**(2)](/utimensat/2.md), [**utimes**(2)](/utimes/2.md), [**futimes**(3)](/futimes/3.md), [**path\_resolution**(7)](/path_resolution/7.md)
