Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Aug 2005 20:51:19 +0400
From:      Igor Pokrovsky <ip@doom.homeunix.org>
To:        hackers@freebsd.org
Subject:   Re: perl's tie problem
Message-ID:  <20050813165119.GA1234@doom.homeunix.org>
In-Reply-To: <200508122034.j7CKYp2x033829@wattres.watt.com>
References:  <20050812194927.GA74052@doom.homeunix.org> <200508122034.j7CKYp2x033829@wattres.watt.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Fri, Aug 12, 2005 at 01:34:51PM -0700, Steve Watt wrote:
> In article <20050812194927.GA74052@doom.homeunix.org> you write:
> >Hi all,
> >
> >Consider the following except from a perl program:
> >
> >tie(%foodb, 'MLDBM', $BAR_FILE, O_CREAT | O_RDWR, 0666)                    
> >  or die("Cannot open $BAR_FILE: $!\n");
> >
> >I expect it to create a new $BAR_FILE, if none existed, with 0666
> >permissions. But it doesn't. It creates a file with default umask 
> >specified permissions - 0644. So I have to manually do chmod on that
> >file afterwards. Is there anything I don't understand?
> >
> >%uname -a
> >FreeBSD doom.homeunix.org 4.11-STABLE FreeBSD 4.11-STABLE #0: 
> >Tue Jul  5 21:05:20 MSD 2005 [...] i386
> 
> umask applies after the open call's permissions, and is used to remove
> bits from the value passed in to the open.  That's the way POSIX
> says it works, and that's how it works on UNIX machines.
> 
> Down in the guts of the open() syscall, there's a line that
> effectively says
>   file_permissions = passed_in_permissions & ~umask;
> 
> It's working as designed.

Thanks for explanation guys. I guess I'm still thinking windoze.

-ip

-- 
If there isn't a law, there will be.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050813165119.GA1234>