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>