perl's tie problem

Igor Pokrovsky ip at doom.homeunix.org
Sat Aug 13 16:51:32 GMT 2005


On Fri, Aug 12, 2005 at 01:34:51PM -0700, Steve Watt wrote:
> In article <20050812194927.GA74052 at 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.


More information about the freebsd-hackers mailing list