Schrift
[thread]5647[/thread]

stat() - Was steckt genau im mode Feld? (Seite 2)

Leser: 1


<< |< 1 2 >| >> 20 Einträge, 2 Seiten
esskar
 2003-08-24 14:33
#76322 #76322
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ich glaube, das geht nicht mit stat
da musst du schon -f und -d nehmen...
bzw.

probier es mal so

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
use strict;
use Fcntl ':mode';

my $dir = "C:\\folder";
my $file = "c:\\test.txt";
my $mode;

$mode = (stat($file))[2];
print "Is '$file' a folder? " . S_ISDIR($mode) ? "Yes" : "No";
$mode = (stat($dir))[2];
print "Is '$dir' a folder? " . S_ISDIR($mode) ? "Yes" : "No";
[E|B]
 2003-08-24 14:35
#76323 #76323
User since
2003-08-08
2561 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Mit "stat" kannst du es wie folgt machen:

Code: (dl )
$data = (stat("data"))[2];


Jetzt hast du die oktale Zahl für den Dateityp und die Zugriffsrechte (AFAIK 4 Zahlen). Die erste Zahl gibt dir den Dateityp an, die letzten drei die Zugriffsrechte.
War es das, wonach du gesucht hast?
Gruß, Erik!

s))91\&\/\^z->sub{}\(\@new\)=>69\&\/\^z->sub{}\(\@new\)=>124\&\/\^z->sub{}\(\@new\)=>);
$_.=qq~66\&\/\^z->sub{}\(\@new\)=>93~;for(@_=split(/\&\/\^z->sub{}\(\@new\)=>/)){print chr;}

It's not a bug, it's a feature! - [CGI-World.de]
FReAK La Marsch
 2003-08-25 01:28
#76324 #76324
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
ja genau so mach ich das die ganze Zeit mit stat und die rechte haben wir ja schon weiter oben durchgekaut. Jetzt müßt ich nur wissen welchen Wert die erste Stelle haben kann, was diese Werte bedeuten und ob es da auch die drei Typen file, directory und link gibt. Z.b. hab ich ja die Zahl 16895 bzw. 40777 in oktal. das 0777 beschreibt die rechte und die erste Zahl wohl den Typ, aber welcher Typ ist 4? (Ich bin noch nicht zum rumprobieren gekommen)
Dubu
 2003-08-25 01:32
#76325 #76325
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Aus der fstat-Manpage:
fstat(2),Linux
      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 GID 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 permisson
      S_IXOTH    00001     others have execute permission
Strat
 2003-08-25 02:27
#76326 #76326
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
perldoc -f -x
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
 -r  File is readable by effective uid/gid.
-w  File is writable by effective uid/gid.
-x  File is executable by effective uid/gid.
-o  File is owned by effective uid.

-R  File is readable by real uid/gid.
-W  File is writable by real uid/gid.
-X  File is executable by real uid/gid.
-O  File is owned by real uid.

-e  File exists.
-z  File has zero size (is empty).
-s  File has nonzero size (returns size in bytes).

-f  File is a plain file.
-d  File is a directory.
-l  File is a symbolic link.
-p  File is a named pipe (FIFO), or Filehandle is a pipe.
-S  File is a socket.
-b  File is a block special file.
-c  File is a character special file.
-t  Filehandle is opened to a tty.

-u  File has setuid bit set.
-g  File has setgid bit set.
-k  File has sticky bit set.

-T  File is an ASCII text file (heuristic guess).
-B  File is a "binary" file (opposite of -T).

-M  Script start time minus file modification time, in days.
-A  Same for access time.
-C  Same for inode change time (Unix, may differ for other platform


Datein rekursiv einlesen: CPAN:File::Find und CPAN:File::Find::Rule

Dateien nach einem Muster einlesen:
my @files = glob("c:/winNT/*.dll");
oder das Modul: CPAN:File::DosGlob
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
pq
 2003-08-25 03:28
#76327 #76327
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=FReAK La Marsch,24.08.2003, 11:18]Auch wenn mir noch immer keiner verraten hat, wie ich jetzt herausfinde ob ich es mit einer Datei oder einem Verzeichnis zu tun hab.[/quote]
siehe [E|B]s erste antwort. die fand ich völlig ausreichend, oder nicht?
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
FReAK La Marsch
 2003-08-25 11:18
#76328 #76328
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
@pq siehe meine Antwort auf [E|B]s erste Antwort :-)
Ich würde gerne nur einmal auf das File zugreifen müssen, um alles darüber herauszufinden. Wenn ich das ganze mittels -d, -f, -l, etc. mache, so muss ich etliche Male auf das File zugreifen während mir stat ja auf einmal alle Infos liefert, so dass ich die Infos nur noch deuten muss.

Die Info von Dubu sieht aber ganz interessant aus, damit kann ich glaub ich was Anfangen. Danke!

Und noch viel Spaß!
Dubu
 2003-08-25 13:01
#76329 #76329
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=FReAK La Marsch,25.08.2003, 09:18]
Ich würde gerne nur einmal auf das File zugreifen müssen, um alles darüber herauszufinden.
[/quote]
Loesungen mit stat() hatten wir ja schon.
Quote
Wenn ich das ganze mittels -d, -f, -l, etc. mache, so muss ich etliche Male auf das File zugreifen

Noe, dafuer gibt es ja das Default-Filehandle '_':
Code (perl): (dl )
1
2
3
if (-f "dateiname" && -x _) {
    print "Ausfuehrbare einfache Datei\n";
}
FReAK La Marsch
 2003-08-26 13:34
#76330 #76330
User since
2003-08-14
38 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hmm, jetzt weiß ich auch für was _ da ist :-)
Die ganzen default Variablen von Perl kenn ich noch nicht so recht.

Ich glaub ich test mal beide Varianten und schau dann was schneller läuft. Momentan nehm ich den Mode vom stat, wandel ihn in nen String um und laß dann nen regex drüberlaufen, so daß ich dann etwas wie -rwxrw-rw- habe.
esskar
 2003-08-26 15:08
#76331 #76331
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
regexp kann oft langsamer sein!
<< |< 1 2 >| >> 20 Einträge, 2 Seiten



View all threads created 2003-08-23 17:24.