frank cui wrote:
hi,

Hello,

I'm reading the book of "automating system administration with perl" and
having doubts about this code snippets about file health check.

# attempt to read the directory entry for this file
my @stat = stat($name);

That should probably be:

my @stat = stat($name) or return 0;


if ( !$stat[4] && !$stat[5] && !$stat[6] && !$stat[7] && !$stat[8] ) {
return 0;                        # according to the code context, here it
is saying the file is NOT ok
}

here $name refers to the file name and it's checking the stat of this file.

stat[4:8] refers to the following from the "perldoc -f stat"

4 uid      numeric user ID of file's owner
5 gid      numeric group ID of file's owner
6 rdev     the device identifier (special files only)
7 size     total size of file, in bytes
8 atime    last access time in seconds since the epoch

so here the code is actually saying if all the above entries is 0 or
undefined, then we declare this file to be NOT ok .
and my question would be about this logic, why are we checking all of them
with a AND relationship rather than OR, or maybe something else(like
checking all the 0-12 entries) ?

That looks like a general heuristic that the author assumed would indicated a bad file. As to whether it would work accurately is mute (there are a lot of files with a UID, GID and RDEV of 0, assuming he is reading from the whole file system.)



John
--
Any intelligent fool can make things bigger and
more complex... It takes a touch of genius -
and a lot of courage to move in the opposite
direction.                   -- Albert Einstein

--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to