write access to various times
mdf at FreeBSD.org
mdf at FreeBSD.org
Mon Nov 7 17:45:25 UTC 2011
On Fri, Nov 4, 2011 at 11:46 PM, Ronald F. Guilmette
<rfg at tristatelogic.com> wrote:
> It would appear that in 8.2-RELEASE, at least, each "struct stat" contains
> four fields, each of type "timespec", and having the following names:
>
> st_atimespec
> st_mtimespec
> st_ctimespec
> st_birthtimespec
>
> I already know that if I want to modify either (or both) of the first
> two fields listed above, I should call utimes(2). But what do I do if I need
> to modify the values of either or both of the other two fields? (I may want
> to do this, e.g. if I am trying to restore all of the struct stat fields
> from a backed-up representation of some original filesystem entry.)
>
> The current man page for utimes(2) says (among other things):
>
> ===========================================================================
> ...
> If times is non-NULL, it is assumed to point to an array of two timeval
> structures. The access time is set to the value of the first element,
> and the modification time is set to the value of the second element. For
> file systems that support file birth (creation) times (such as UFS2), the
> birth time will be set to the value of the second element if the second
> element is older than the currently set birth time. To set both a birth
> time and a modification time, two calls are required; the first to set
> the birth time and the second to set the (presumably newer) modification
> time. Ideally a new system call will be added that allows the setting of
> all three times at once...
> ===========================================================================
>
> Is there any ETA for this postulated new system call?
To my knowledge, no. I think this was a hopeful statement on the
original author's part. AFAIK no one is working on this change.
We have a patch at $WORK that adds a vtimes(2) syscall with support
for setting birthtime as well as mtime and atime. Some day [1] I may
be able to upstream this functionality back to FreeBSD.
[1] predicated on continued employment, change of roles at $WORK,
time, and community acceptance of the changes. A rough estimate would
be sometime in the middle or end of 2012.
Cheers,
matthew
> Also, of course, although the method described above for setting the value of
> the st_birthtimespec field is rather clumsey and inefficient, at least there
> _is_ a way to set that field. I am concerned however because I personally
> still know of no way whatsoever to set the value of the st_ctimespec field.
> Is there any way to do that?
>
> It would be most helpful to have that too.
More information about the freebsd-fs
mailing list