Re: Reg. Directory listing program

[email protected] ("John W. Krahn")
Newsgroups perl.beginners
Message-ID <[email protected]>
Gunwant Singh wrote:
> Hi,

Hello,

> Let me thank you for your help. I think you guys are doing a great work, its
> really appreciative.
> Thanks to David and John. Now that I changed my *"perl"* code to the
> following, its actually working!!!!
> 
> *use strict;
> use warnings;
> use File::stat;
> 
> opendir (DH, "subcode") or die "$!";
> chdir("C:/Documents and Settings/Myself/Desktop/code/subcode");
> 
> foreach my $file(readdir DH)
> {
> my $value=stat($file);
> my $perm=$value->mode & 07777;
> printf "\n$file\t%04o\n", $perm;
> }
> 
> closedir (DH);*
> 
> 
> Leading to a question, why did we 'AND' *mode* to *07777*. What does each
> bit stand for and why there  are 5 bits as compared to UNIX's
> User-Group-Others bits. So actually 3 questions :)

man 2 stat
[snip]
        The following flags are defined for the st_mode field:

               S_IFMT     0170000   bitmask for the file type bitfields
               S_IFSOCK   0140000   socket
               S_IFLNK    0120000   symbolic link
               S_IFREG    0100000   regular file
               S_IFBLK    0060000   block device
               S_IFDIR    0040000   directory
               S_IFCHR    0020000   character device
               S_IFIFO    0010000   FIFO
               S_ISUID    0004000   set UID bit
               S_ISGID    0002000   set-group-ID bit (see below)
               S_ISVTX    0001000   sticky bit (see below)
               S_IRWXU    00700     mask for file owner permissions
               S_IRUSR    00400     owner has read permission
               S_IWUSR    00200     owner has write permission
               S_IXUSR    00100     owner has execute permission
               S_IRWXG    00070     mask for group permissions
               S_IRGRP    00040     group has read permission
               S_IWGRP    00020     group has write permission
               S_IXGRP    00010     group has execute permission
               S_IRWXO    00007     mask for permissions for others (not 
in group)
               S_IROTH    00004     others have read permission
               S_IWOTH    00002     others have write permission
               S_IXOTH    00001     others have execute permission


So "mode & 07777" displays the permission bits as well as SUID, SGID and 
the "sticky" bit.



John
-- 
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order.                            -- Larry Wall
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.