The utimes call uses the "accessed" and "updated" times in that order from the tvp vector to set the corresponding recorded times for file.
The caller must be the owner of the file or the super-user. The "inode-changed" time of the file is set to the current time.
Upon successful completion, a value of 0 is returned. Otherwise, a value of -1 is returned and errno is set to indicate the error.
Utime will fail if one or more of the following are true:
[ENOTDIR] A component of the path prefix is not a directory.
[EINVAL] The pathname contains a character with the high-order bit set.
[ENAMETOOLONG] A component of a pathname exceeded 255 characters, or an entire path name exceeded 1023 characters.
[ENOENT] The named file does not exist.
[ELOOP] Too many symbolic links were encountered in translating the pathname.
[EPERM] The process is not super-user and not the owner of the file.
[EACCES] Search permission is denied for a component of the path prefix.
[EROFS] The file system containing the file is mounted read-only.
[EFAULT] File or tvp points outside the process's allocated address space.
[EIO] An I/O error occurred while reading or writing the affected inode.