mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 05:47:35 +00:00
Base: Write man page for utimensat(3) and futimens(3)
This commit is contained in:
parent
c77cdd8cad
commit
210c3f24cd
2 changed files with 106 additions and 0 deletions
1
Base/usr/share/man/man3/futimens.md
Symbolic link
1
Base/usr/share/man/man3/futimens.md
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
utimensat.md
|
105
Base/usr/share/man/man3/utimensat.md
Normal file
105
Base/usr/share/man/man3/utimensat.md
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
## Name
|
||||||
|
|
||||||
|
futimens, utimensat - update file access and modification times
|
||||||
|
|
||||||
|
## Synopsis
|
||||||
|
|
||||||
|
```**c++
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
int futimens(int fd, struct timespec const times[2]);
|
||||||
|
|
||||||
|
#include <fcntl.h>
|
||||||
|
|
||||||
|
int utimensat(int dirfd, char const* path, struct timespec const times[2],
|
||||||
|
int flag);
|
||||||
|
```
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
`futimens()` and `utimensat()` set the access and modification times of a file
|
||||||
|
to the values specified in `times`.
|
||||||
|
|
||||||
|
`futimens()` updates the times of the file associated with the file descriptor.
|
||||||
|
|
||||||
|
`utimensat()` functions in two ways.
|
||||||
|
|
||||||
|
1. Given a valid file descriptor for a directory and a non-empty path,
|
||||||
|
`utimensat()` updates the value of the file specified by the path relative to
|
||||||
|
the directory specified by the file descriptor. This is standard POSIX
|
||||||
|
behavior.
|
||||||
|
2. Given a valid file descriptor to a regular file and an empty path,
|
||||||
|
`utimensat()` updates the value of the file associated with the file
|
||||||
|
descriptor. This is not standard POSIX behavior, but it allows `futimens()` to
|
||||||
|
be implemented in terms of `utimensat()`.
|
||||||
|
|
||||||
|
If the `tv_nsec` field of `times` is set to UTIME_NOW, then the corresponding
|
||||||
|
timestamp of the file is set to the current time. If the `tv_nsec` field of
|
||||||
|
`times` is set to UTIME_OMIT, then the corresponding timestamp is not modified.
|
||||||
|
In both of these special cases, `tv_sec`, the other field in `times`, is
|
||||||
|
ignored.
|
||||||
|
|
||||||
|
If `times` is a null pointer, then both the last access time and the last
|
||||||
|
modification time are set to the current time. This configuration is equivalent
|
||||||
|
to setting the `tv_nsec` field to UTIME_NOW for both timespec structures in the
|
||||||
|
array.
|
||||||
|
|
||||||
|
Parameter `flag` of `utimensat()` may be set to 0 or `AT_SYMLINK_NOFOLLOW`. If
|
||||||
|
set to `AT_SYMLINK_NOFOLLOW`, instead of following a symbolic link,
|
||||||
|
`utimensat()` updates the timestamps of the link itself. `futimens()` always
|
||||||
|
follows symbolic links.
|
||||||
|
|
||||||
|
Parameter `dirfd` of `utimensat()` may be set to `AT_FDCWD` to use the current
|
||||||
|
working directory as the relative directory.
|
||||||
|
|
||||||
|
## Return Value
|
||||||
|
|
||||||
|
`futimens()` and `utimensat()` return 0 upon success and -1 otherwise. Upon
|
||||||
|
failure, these functions also set `errno` to indicate the error and leave the
|
||||||
|
access and modification times of the specified file unmodified.
|
||||||
|
|
||||||
|
## Errors
|
||||||
|
|
||||||
|
`futimens()` and `utimensat()` may return the following error codes.
|
||||||
|
|
||||||
|
* `EFAULT`: `path` of `utimensat()` is a null pointer.
|
||||||
|
* `EINVAL`: Length of `path` is too long.
|
||||||
|
* `EINVAL`: `flag` is not 0 or `AT_SYMLINK_NOFOLLOW`
|
||||||
|
* `EINVAL`: The timestamp is not supported by the file system.
|
||||||
|
* `EINVAL`: Fields of `times` are less than 0 or greater than or equal to 1000
|
||||||
|
million and not `UTIME_NOW` or `UTIME_OMIT`.
|
||||||
|
* `EACCES`: The current user does not have write access to the file.
|
||||||
|
* `EROFS`: The file system that contains the file is read-only.
|
||||||
|
* `ENOTDIR`: `path` is not absolute and `dirfd` is not a file descriptor
|
||||||
|
associated with a directory.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
```c++
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
timespec times[2];
|
||||||
|
auto& atime = times[0];
|
||||||
|
auto& mtime = times[1];
|
||||||
|
|
||||||
|
atime.tv_sec = 0;
|
||||||
|
atime.tv_nsec = UTIME_NOW;
|
||||||
|
mtime.tv_sec = 0;
|
||||||
|
mtime.tv_nsec = UTIME_OMIT;
|
||||||
|
|
||||||
|
// Update only last access time of file "README.md" in current working
|
||||||
|
// directory to current time. Leave last modification time unchanged.
|
||||||
|
if (utimensat(AT_FDCWD, "README.md", times, 0) == -1) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## See also
|
||||||
|
|
||||||
|
* [`touch`(1)](help://man/1/touch)
|
Loading…
Add table
Add a link
Reference in a new issue