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: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/