On Thu, Jan 17, 2008 at 12:14:59PM +0000, Andreas Kahari wrote:
| The afterboot(8) manual says to use "ln -fs", e.g.
| 
| ln -fs /usr/share/zoneinfo/Canada/Atlantic /etc/localtime
| 
| That way, the /etc/localtime will never not be there (it will not be
| there for a short time between 'rm' and 'ln -s' if you do it that
| way).

Sorry, but there will be a short time where the link is not there,
even with ln -sf, there is no way to atomically change a symlink that
I know of.

>From the source (/usr/src/bin/ln/ln.c) :

        /*
         * If the file exists, and -f was specified, unlink it.
         * Attempt the link.
         */
        if ((fflag && unlink(source) < 0 && errno != ENOENT) ||
            (*linkf)(target, source)) {
                warn("%s", source);
                return (1);
        }

First unlink(source), then link. It's a short period, but it's not 0.

Cheers,

Paul 'WEiRD' de Weerd

-- 
>++++++++[<++++++++++>-]<+++++++.>+++[<------>-]<.>+++[<+
+++++++++++>-]<.>++[<------------>-]<+.--------------.[-]
                 http://www.weirdnet.nl/                 

Reply via email to