SELFHTML/Navigationshilfen CGI/Perl Perl-Funktionen |
Funktionen für Informationen aus Konfigurationsdateien |
|
Allgemeines zu diesen Funktionen |
|
Die hier versammelten Funktionen dienen dazu, Einträge aus System-Konfigurationsdateien zu ermitteln. Es handelt sich dabei ausschließlich um Konfigurationsdaten von Unix-Systemen. Der Vorteil der hier beschriebenen Funktionen gegenüber dem direkten Auslesen jener Dateien ist, dass sie rechnerunabhängig sind, d.h. die Befehle funktionieren auch dann, wenn ein Unix-System anders als im Normalfall konfiguriert ist und die entsprechenden Dateien an anderen Orten liegen.
Die relevanten Konfigurationsdateien werden im folgenden kurz vorgestellt. Die Pfadnamen entsprechen der üblichen Ablage.
In dieser Datei werden Berechtigungsgruppen und deren Mitglieder gespeichert. Eine Berechtigungsgruppe kann bestimmte Rechte an Dateien und Verzeichnissen besitzen, die einem ihrer Mitglieder gehören. Neben Einträgen für "menschliche" Berechtigungsgruppen enthält die Datei auch solche für reservierte, rechnereigene Berechtigungsgruppen, wie beispielsweise mail
, bin
oder tty
. Passwörter sind in dieser Datei nur verschlüsselt gespeichert.
Typische Daten (Beispiel):
root x 0 root
bin x 1 root bin daemon
sys x 101 root bin sys
Jede Zeile der Datei enthält den Namen einer Berechtigungsgruppe, dahinter (verschlüsselt) deren Passwort, dahinter die Gruppennummer (GID) und dahinter die Liste der Mitglieder der Gruppe.
Funktionen zu dieser Datei sind endgrent getgrent getgrgid getgrnam setgrent
Im Beispiel zur Funktion getgrent wird gezeigt, wie Sie die komplette Datei /etc/groups ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
In dieser Datei werden IP-Adressen und Domain-Namen oder Rechnernamen zugeordnet, die der Rechner selber auflösen muss.
Typische Daten (Beispiel):
127.0.0.1 localhost
192.168.10.101 sonne.galaxis.de sonne
192.168.85.1 zeus.edu.saxedu.de zeus
Jede Zeile der Datei enthält eine IP-Adresse, dahinter den offiziellen Domain-Namen und dahinter wahlweise den internen Rechnernamen, jeweils durch Leerzeichen oder Tabulatoren getrennt. Hinter dem internen Rechnernamen kann wahlweise auch noch ein Aliasname folgen.
Funktionen zu dieser Datei sind endhostent gethostbyaddr gethostbyname gethostent sethostent
Im Beispiel zur Funktion gethostent wird gezeigt, wie Sie die komplette Datei /etc/hosts ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
In dieser Datei werden Netzwerknamen und zugehörige IP-Adressen einander zugeordnet. Dabei wird oft auch der Adresstyp und die Netznummer angegeben.
Typische Daten (Beispiel):
loopback 127.0.0.0 2 2130706432
Jede Zeile der Datei enthält einen Netzwerknamen, die zugehörige Netzwerk-IP-Adresse, den Adresstyp und die Netznummer.
Funktionen zu dieser Datei sind endnetent getnetbyaddr getnetbyname getnetent setnetent
Im Beispiel zur Funktion getnetent wird gezeigt, wie Sie die komplette Datei /etc/networks ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
In dieser Datei werden alle wichtigen Daten aller Benutzer gespeichert, die Zugang zum Rechner haben. Dazu gehören z.B. die Benutzernamen, ihre Passwörter, die Benutzernummern (UIDs) und die Heimatverzeichnisse der Anwender. Neben Einträgen für normale Benutzer enthält die Datei auch solche für reservierte Benutzer, wie beispielsweise root
(auf emanzipierten Rechnern auch ruth
), daemon
oder ftp
(für den anonymen FTP-Zugang). Passwörter sind in dieser Datei nur verschlüsselt gespeichert.
Typische Daten (Beispiel):
root x 0 0 root /root /bin/mysh
bin x 1 1 bin /bin /bin/mysh
customer x 29 29 Kunde /usr/lib/kunde /bin/mysh
Jede Zeile der Datei enthält den Benutzernamen, das zugehörige Passwort (verschlüsselt), die zugehörige Benutzernummer (UID), die Nummer seiner Berechtigungsgruppe (GID), beschreibende Angaben zum Benutzer, sein Heimatverzeichnis auf dem Rechner, seine Shell (Instanz des Kommando-Interpreters), und gegebenenfalls Angaben zum Verfallsdatum der Gültigkeit des Eintrags.
Funktionen zu dieser Datei sind endpwent getpwent getpwnam getpwuid setpwent
Im Beispiel zur Funktion getpwent wird gezeigt, wie Sie die komplette Datei /etc/passwd ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
In dieser Datei sind die Protokollnamen und Protokollnummern der Transportprotokolle eingetragen, die das System unterstützt.
Typische Daten (Beispiel):
ip IP 0
icmp ICMP 1
igmp IGMP 2
ggp GGP 3
tcp TCP 6
Jede Zeile der Datei enthält den Namen des Transportprotokolls, die Protokollnummer und den Aliasnamen des Protokolls.
Funktionen zu dieser Datei sind endprotoent getprotobyname getprotobynumber getprotoent setprotoent
Im Beispiel zur Funktion getprotoent wird gezeigt, wie Sie die komplette Datei /etc/protocols ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
In dieser Datei werden die Namen von Netzwerkdiensten sowie die zugehörigen Portnummern und Protokollnamen gespeichert.
Typische Daten (Beispiel):
ftp 21 tcp
telnet 23 tcp
smtp mail 25 tcp
whois nicname 43 tcp
domain nameserver 53 tcp
gopher 70 tcp
finger 79 tcp
www http 80 tcp
www 80 udp
Funktionen zu dieser Datei sind endservent getservbyname getservbyport getservent setservent
Im Beispiel zur Funktion getservent wird gezeigt, wie Sie die komplette Datei /etc/services ausgeben können. Dadurch gewinnen Sie einen vollständigen Überblick über den Inhalt der Datei.
Springt an das Ende der Datei /etc/group und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getgrent(); print "$Wert\n"; endgrent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit getgrent den ersten Eintrag aus /etc/groups, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Springt an das Ende der Datei /etc/hosts und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = gethostent(); print "$Wert\n"; endhostent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit gethostent den ersten Eintrag aus /etc/hosts, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Springt an das Ende der Datei /etc/networks und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getnetent(); print "$Wert\n"; endnetent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit getnetent den ersten Eintrag aus /etc/networks, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Springt an das Ende der Datei /etc/protocols und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getprotent(); print "$Wert\n"; endprotent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit getprotent den ersten Eintrag aus /etc/protocols, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Springt an das Ende der Datei /etc/passwd und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getnetent(); print "$Wert\n"; endnetent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit getpwent den ersten Eintrag aus /etc/passwd, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Springt an das Ende der Datei /etc/services und beendet den Zugriff darauf.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getservent(); print "$Wert\n"; endservent(); print "</pre></body></html>\n"; |
Das Beispiel ermittelt mit getnetent den ersten Eintrag aus /etc/services, gibt den ermittelten Wert aus und springt dann ans Ende der Datei.
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/group oder Listenkontext eine Liste mit vier Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getgrent(); while(@Liste) { print "$Liste[0]] $Liste[1] $Liste[2] $Liste[3]\n"; @Liste = getgrent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/groups mit einem CGI-Script im Browser ausgeben können. Zunächst wird getgrent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die vier Elemente des Arrays ausgegeben, und getgrent
wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente des Arrays, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Name der Berechtigungsgruppe,
$Liste[1]
= Passwort der Berechtigungsgruppe (verschlüsselt),
$Liste[2]
= Nummer der Berechtigungsgruppe (GID),
$Liste[3]
= Mitgliedernamen der Berechtigungsgruppe
Ermittelt aus der Datei /etc/group den zugehörigen Eintrag zu einer bestimmten Gruppen-ID (GID). Im skalaren Kontext wird dabei der zugehörige Gruppenname ermittelt, im Listenkontext der gesamte Eintrag zur GID.
Erwartet als Parameter:
1. die gewünschte GID.
Gibt je nach Kontext entweder den Gruppennamen oder die Liste zurück. Wenn die angegebene GID nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body>\n"; ($Name,$Passwort,$Gid,$Mitglieder) = getgrgid(2); print "<h3>Listenkontext:</h3>"; print "<pre>$Name\n$GrPasswort\n$Gid\n$Mitglieder</pre>"; print "<h3>Skalarer Kontext:</h3><pre>"; my $Wert = getgrgid(2); print "<pre>$Wert</pre>\n"; print "</body></html>\n"; |
Das Beispiel ruft insgesamt zwei mal die Funktion getgrgid
auf, zuerst im Listenkontext, später im skalaren Kontext. In beiden Fällen wird 2
als gesuchte Gruppennummer (GID) übergeben. Im Listenkontext wird der gesamte gefundene Eintrag, bestehend aus Gruppenname, Gruppenpaßwort (verschlüsselt), Gruppennummer und Mitgliedernamen, vom Script an den Browser zur Ausgabe gesendet. Im skalaren Kontext wird nur der zur Gruppennummer gehörige Gruppenname ausgegeben.
Ermittelt aus der Datei /etc/group den zugehörigen Eintrag zu einem bestimmten Gruppennamen. Im skalaren Kontext wird dabei die Gruppen-ID (GID) des angegebenen Namens ermittelt, im Listenkontext der gesamte Eintrag zu dem Gruppennamen.
Erwartet als Parameter:
1. den gewünschten Gruppennamen.
Gibt je nach Kontext entweder die zugehörige Gruppennummer (GID) oder die Liste zurück. Wenn der angegebene Gruppenname nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body>\n"; (my $Name, my $Passwort, my $Gid, my $Mitglieder) = getgrnam("mail"); print "<h3>Listenkontext:</h3>"; print "<pre>$Name\n$Passwort\n$Gid\n$Mitglieder</pre>"; print "<h3>Skalarer Kontext:</h3>"; my $Wert = getgrnam("mail"); print "<pre>$Wert</pre>\n"; print "</body></html>\n"; |
Das Beispiel ruft insgesamt zwei mal die Funktion getgrgid
auf, zuerst im Listenkontext, später im skalaren Kontext. In beiden Fällen wird "mail"
als gesuchter Gruppenname übergeben. Im Listenkontext wird der gesamte gefundene Eintrag, bestehend aus Gruppenname, Gruppenpaßwort (verschlüsselt), Gruppennummer und Mitgliedernamen, vom Script an den Browser zur Ausgabe gesendet. Im skalaren Kontext wird nur die zum Gruppennamen gehörige Gruppennummer (GID) ausgegeben.
Ermittelt aus der Datei /etc/hosts den Hostnamen zu einer bestimmten IP-Adresse.
Erwartet als Parameter:
1. die gewünschte IP-Adresse, und zwar numerisch in binärer Schreibweise.
2. den Adresstyp der IP-Adresse (numerisch).
Gibt den zugehörigen Hostnamen zurück. Wenn die angegebene IP-Adresse nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; use Socket; my $addr = inet_aton("127.0.0.1"); my $Wert = gethostbyaddr($addr, AF_INET); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie den Hostnamen zu einer IP-Adresse auf dem Rechner ermitteln können. Um die etwas komplizierte Parameterversorgung der Funktion gethostbyaddr
sicherzustellen, wird das Standardmodul Socket
verwendet. Durch Aufruf der Modul-Funktion inet_aton
wird eine in üblicher Schreibweise notierte, übergebene IP-Adresse in die erforderliche binäre Form umgewandelt. Das Ergebnis wird in dem Skalar $addr
gespeichert. Das Modul Socket
stellt auch Konstanten für den Adresstyp zur Verfügung. Die korrekte Konstante für den zweiten Parameter von gethostbyaddr
ist AF_INET
. Durch Übergabe von $addr
und AF_INET
wird gethostbyaddr
richtig versorgt und gibt den Hostnamen zur Beispieladresse 127.0.0.1
aus (üblicherweise localhost
).
Ermittelt aus der Datei /etc/hosts die IP-Adresse zu einem bestimmten Hostnamen.
Erwartet als Parameter:
1. den gewünschten Hostnamen.
Gibt die zugehörige IP-Adresse zurück, allerdings binär numerisch.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; use Socket; my $addr = gethostbyname("localhost"); my $Wert = inet_ntoa($addr); print "$Wert"; print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie die IP-Adresse zu einem Hostnamen auf dem Rechner ermitteln können. Dazu wird das Standardmodul Socket
verwendet. Damit lässt sich der binär numerische Rückgabewert von gethostbyname
, der im Beispiel in dem Skalar $addr
gespeichert wird, bequem in die übliche Schreibweise konvertieren. Durch Aufruf der Modul-Funktion inet_ntoa
wird $addr
in die übliche Schreibweise umgewandelt. Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar $Wert
gespeichert. Anschließend wird die IP-Adresse zu dem Hostnamen localhost
ausgegeben (üblicherweise 127.0.0.1
).
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/hosts oder Listenkontext eine Liste mit fünf und mehr Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = gethostent(); while(@Liste) { print "$Liste[0] $Liste[1] $Liste[2]"; for(my $i = 0; $i < $Liste[3]; $i++) { (my $a, my $b, my $c, my $d) = unpack('C4',$Liste[4+$i]); print " $a.$b.$c.$d"; } print "\n"; @Liste = gethostent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/hosts mit einem CGI-Script im Browser ausgeben können. Zunächst wird gethostent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die Elemente der Liste ausgegeben, und getgrent
wird für den nächsten Schleifendurchgang aufgerufen. Die Liste enthält als letztes Listenelement wiederum eine Liste, so dass eine weitere, innere for-Schleife nötig ist, um alle Elemente zu ermitteln.
Die Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Hostname,
$Liste[1]
= Aliasnamen des Hostnamens,
$Liste[2]
= Adresstyp,
$Liste[3]
= Anzahl der noch folgenden Listenelemente
$Liste[4]
und weitere = zugeordnete IP-Adressen
Die zugeordneten IP-Adressen sind binär gespeichert. Um die übliche Vier-Zahlen-Darstellung zu erhalten, muss die binäre Schreibweise erst konvertiert werden. Das ist durch Anwendung der Funktion unpack mit C4
als erstem Parameter möglich, so wie im obigen Beispiel. Dort werden auf diese Weise die vier Einzelzahlen der IP-Adresse ermittelt und in den Skalaren $a
, $b
, $c
und $d
gespeichert.
Erwartet keine Parameter.
Gibt den Loginnamen des aktuellen. Benutzers zurück
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getlogin(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt den Loginnamen mit getlogin
, speichert ihn in dem Skalar $Wert
und gibt diesen zur Kontrolle aus.
Ermittelt aus der Datei /etc/networks den Netzwerknamen zu einer bestimmten IP-Adresse.
Erwartet als Parameter:
1. die gewünschte IP-Adresse, und zwar numerisch in binärer Schreibweise.
2. den Adresstyp der IP-Adresse (numerisch).
Gibt den zugehörigen Netzwerknamen zurück. Wenn die angegebene IP-Adresse nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; use Socket; my $addr = inet_aton("127.0.0.0"); my $Wert = getnetbyaddr($addr, AF_INET); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie den Netzwerknamen zu einer IP-Adresse auf dem Rechner ermitteln können. Um die etwas komplizierte Parameterversorgung der Funktion getnetbyaddr
sicherzustellen, wird das Standardmodul Socket
verwendet. Durch Aufruf der Modul-Funktion inet_aton
wird eine in üblicher Schreibweise notierte, übergebene IP-Adresse in die erforderliche binäre Form umgewandelt. Das Ergebnis wird in dem Skalar $addr
gespeichert. Das Modul Socket
stellt auch Konstanten für den Adresstyp zur Verfügung. Die korrekte Konstante für den zweiten Parameter von gethostbyaddr
ist AF_INET
. Durch Übergabe von $addr
und AF_INET
wird getnetbyaddr
richtig versorgt und gibt den Netzwerknamen zur Beispieladresse 127.0.0.0
aus (üblicherweise loopback
).
Ermittelt aus der Datei /etc/networks die IP-Adresse zu einem bestimmten Netzwerknamen.
Erwartet als Parameter:
1. den gewünschten Netzwerknamen.
Gibt die zugehörige IP-Adresse zurück, allerdings binär numerisch.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; use Socket; my $addr = getnetbyname("loopback"); my $Wert = inet_ntoa($addr); print "$Wert"; print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie die IP-Adresse zu einem Netzwerknamen auf dem Rechner ermitteln können. Dazu wird das Standardmodul Socket
verwendet. Damit lässt sich der binär numerische Rückgabewert von getnetbyname
, der im Beispiel in dem Skalar $addr
gespeichert wird, bequem in die übliche Schreibweise konvertieren. Durch Aufruf der Modul-Funktion inet_ntoa
wird $addr
in die übliche Schreibweise umgewandelt. Das Ergebnis der Konvertierung wird im Beispiel in dem Skalar $Wert
gespeichert. Anschließend wird die IP-Adresse zu dem Netzwerknamen loopback
ausgegeben (üblicherweise 127.0.0.0
).
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/networks oder Listenkontext eine Liste mit vier Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getnetent(); while(@Liste) { print "$Liste[0] $Liste[1] $Liste[2] $Liste[3]\n"; @Liste = getnetent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/networks mit einem CGI-Script im Browser ausgeben können. Zunächst wird getnetent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die vier Elemente der Liste ausgegeben, und getnetent
wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Name des Netzwerks,
$Liste[1]
= Aliasnamen des Netzwerks,
$Liste[2]
= Adresstyp,
$Liste[3]
= Nummer des Netzwerks
Ermittelt aus der Datei /etc/protocols die Protokollnummer zu einem bestimmten Protokollnamen.
Erwartet als Parameter:
1. den gewünschten Protokollnamen.
Gibt die zugehörige Protokollnummer zurück. Wenn der übergebene Protokollname nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getprotobyname("tcp"); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt die Protokollnummer zum Protokoll tcp
. Dazu dient der Aufruf getprotobyname("tcp")
, dessen Rückgabewert im Skalar $Wert
gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.
Ermittelt aus der Datei /etc/protocols den Protokollnamen zu einer bestimmten Protokollnummer.
Erwartet als Parameter:
1. die gewünschte Protokollnummer.
Gibt den zugehörigen Protokollnamen zurück. Wenn die übergebene Protokollnummer nicht gefunden wurde, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getprotobynumber(17); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt den Protokollnamen zur Protokollnummer 17
. Dazu dient der Aufruf getprotobynumber(17)
, dessen Rückgabewert im Skalar $Wert
gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/protocols oder Listenkontext eine Liste mit drei Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getprotoent(); while(@Liste) { print "$Liste[0] $Liste[1] $Liste[2]\n"; @Liste = getprotoent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/protocols mit einem CGI-Script im Browser ausgeben können. Zunächst wird getprotent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die vier Elemente der Liste ausgegeben, und getnetent
wird für den nächsten Schleifendurchgang aufgerufen. Die drei Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Protokollname,
$Liste[1]
= Protokollnummer,
$Liste[2]
= Aliasname des Protokolls
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/passwd oder Listenkontext eine Liste mit bis zu neun Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getpwent(); while(@Liste) { print "$Liste[0] $Liste[1] $Liste[2] $Liste[3] $Liste[4] $Liste[5] $Liste[6] $Liste[7] $Liste[8]\n"; @Liste = getpwent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/passwd mit einem CGI-Script im Browser ausgeben können. Zunächst wird getpwent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die neun Elemente der Liste ausgegeben, und getpwent
wird für den nächsten Schleifendurchgang aufgerufen. Die neun Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Benutzername,
$Liste[1]
= Benutzerpaßwort (verschlüsselt),
$Liste[2]
= Benutzernummer (UID),
$Liste[3]
= Nummer der zugehörigen Berechtigungsgruppe (GID),
$Liste[4]
= beschreibende Angaben,
$Liste[5]
= beschreibende Angaben,
$Liste[6]
= Heimatverzeichnis des Benutzers,
$Liste[7]
= Shell des Benutzers,
$Liste[8]
= (optional) Verfallszeitpunkt der Gültigkeit des Eintrags
Ermittelt zu einem bestimmten Benutzernamen den Eintrag aus der Datei /etc/passwd den zugehörigen Eintrag. Im skalaren Kontext wird die Benutzernummer (UID) ermittelt, im Listenkontext eine Liste mit bis zu neun Elementen.
Erwartet als Parameter:
1. den gewünschten Benutzernamen.
Gibt im skalaren Kontext die zugehörige Benutzernummer (UID) und im Listenkontext eine Liste mit allen Daten des Eintrags zurück. Wenn der Benutzername nicht gefunden wurden, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getpwnam("uucp"); print "$Liste[0] $Liste[1] $Liste[2] $Liste[3] $Liste[4] $Liste[5] $Liste[6] $Liste[7] $Liste[8]\n"; my $Wert = getpwnam("uucp"); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt für den Benutzernamen uucp
, der der Funktion getpwbynam
übergeben wird, den zugehörigen Eintrag - zuerst im Listenkontext, und beim zweiten Aufruf im skalaren Kontext. Im Listenkontext werden alle neun Elemente des Eintrags ermittelt und im Array @Liste
gespeichert, im skalaren Kontext nur die Benutzernummer (UID), gespeichert im Skalar $Wert
. Das Beispiel gibt beide Aufrufergebnisse zur Kontrolle aus. Zur Bedeutung der Array-Elemente siehe Funktion getpwent.
Ermittelt zu einer bestimmten Benutzernummer (UID) den Eintrag aus der Datei /etc/passwd den zugehörigen Eintrag. Im skalaren Kontext wird der Benutzername ermittelt, im Listenkontext eine Liste mit bis zu neun Elementen.
Erwartet als Parameter:
1. die gewünschte Benutzernummer (UID).
Gibt im skalaren Kontext den zugehörigen Benutzernamen und im Listenkontext eine Liste mit allen Daten des Eintrags zurück. Wenn die Benutzernummer nicht gefunden wurden, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getpwuid(2); print "$Liste[0] $Liste[1] $Liste[2] $Liste[3] $Liste[4] $Liste[5] $Liste[6] $Liste[7] $Liste[8]\n"; my $Wert = getpwuid(2); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt für die Benutzernummer 2
, der der Funktion getpwbyuid
übergeben wird, den zugehörigen Eintrag - zuerst im Listenkontext, und beim zweiten Aufruf im skalaren Kontext. Im Listenkontext werden alle neun Elemente des Eintrags ermittelt und im Array @Liste
gespeichert, im skalaren Kontext nur der Benutzername, gespeichert im Skalar $Wert
. Das Beispiel gibt beide Aufrufergebnisse zur Kontrolle aus. Zur Bedeutung der Listenelemente siehe Funktion getpwent.
Ermittelt aus der Datei /etc/services die Portnummer zu einem bestimmten Netzwerkdienst.
Erwartet als Parameter:
1. den Namen des gewünschten Netzwerkdienstes,
2. den Namen des gewünschten Protokolls.
Gibt die zugehörige Portnummer zurück. Wenn der übergebene Netzwerkname oder das Protokoll nicht gefunden wurden, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getservbyname("www","tcp"); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt die Portnummer zum Netzwerkdienst www
auf dem Netzwerkprotokoll tcp
. Dazu dient der Aufruf getservbyname("www","tcp")
, dessen Rückgabewert im Skalar $Wert
gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.
Ermittelt aus der Datei /etc/services den Namen eines Netzwerkdienstes zu einer bestimmten Portnummer.
Erwartet als Parameter:
1. die gewünschten Portnummer,
2. den Namen des gewünschten Protokolls.
Gibt den Namen des zugehörigen Netzwerkdienstes zurück. Wenn die übergebene Portnummer oder das Protokoll nicht gefunden wurden, wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my $Wert = getservbyport(80,"tcp"); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel ermittelt den Namen des Netzwerkdienstes mit der Portnummer 80
auf dem Netzwerkprotokoll tcp
. Dazu dient der Aufruf getservbyport(80,"tcp")
, dessen Rückgabewert im Skalar $Wert
gespeichert wird. Zur Kontrolle wird der Wert ausgegeben.
Ermittelt im skalaren Kontext den jeweils nächsten Eintrag aus der Datei /etc/services oder Listenkontext eine Liste mit vier Elementen.
Erwartet keine Parameter.
Gibt je nach Kontext entweder den nächsten Dateieintrag oder die Liste zurück. Bei Dateiende wird undef
zurückgegeben.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; my @Liste = getservent(); while(@Liste) { print "$Liste[0] $Liste[1] $Liste[2] $Liste[3]\n"; @Liste = getservent(); } print "</pre></body></html>\n"; |
Das Beispiel zeigt, wie Sie alle Einträge der Datei /etc/services mit einem CGI-Script im Browser ausgeben können. Zunächst wird getservent
erstmals aufgerufen. Der Rückgabewert wird als Listenkontext interpretiert und im Array @Liste
gespeichert. Solange die Liste einen Inhalt enthält - while(@Liste)
- werden die vier Elemente der Liste ausgegeben, und getservent
wird für den nächsten Schleifendurchgang aufgerufen. Die vier Elemente der Liste, die von der Funktion zurückgegeben wird, sind:
$Liste[0]
= Name des Netzwerkdienstes,
$Liste[1]
= Aliasname des Netzwerkdienstes,
$Liste[2]
= Portnummer des Netzwerkdienstes,
$Liste[3]
= Name des zugehörigen Protokolls
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; setgrent(); my $Wert = getgrent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit setgrent
zum Anfang der Datei. Anschließend liest es mit getgrent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; sethostent(); my $Wert = gethostent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit sethostent
zum Anfang der Datei. Anschließend liest es mit gethostent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; setnetent(); my $Wert = getnetent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit setnetent
zum Anfang der Datei. Anschließend liest es mit getnetent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; setprotoent(); my $Wert = getprotoent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit setprotoent
zum Anfang der Datei. Anschließend liest es mit getprotoent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; setpwent(); my $Wert = getpwent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit setpwent
zum Anfang der Datei. Anschließend liest es mit getpwent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Erwartet keine Parameter.
#!/usr/bin/perl -w use strict; use CGI::Carp qw(fatalsToBrowser); print "Content-type: text/html\n\n"; print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n"; print "<html><head><title>Test-Ausgabe</title></head><body><pre>\n"; setservent(); my $Wert = getservent(); print "$Wert\n"; print "</pre></body></html>\n"; |
Das Beispiel springt mit setservent
zum Anfang der Datei. Anschließend liest es mit getservent den nächsten, in dem Fall den ersten Eintrag der Datei aus. Der Rückgabewert, der im Skalar $Wert
gespeichert ist, wird zur Kontrolle ausgegeben.
Funktionen für Module und Packages | |
Funktionen für Betriebssystemaufrufe | |
SELFHTML/Navigationshilfen CGI/Perl Perl-Funktionen |
© 2001 selfhtml@teamone.de