www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Beispielprogramm

dynalib.pl
#!/usr/local/bin/perl -w
# dynalib.pl -- Dynamischer Aufruf von Libraryfunktionen: C::DynaLib

use C::DynaLib;                          # CPAN-Modul
use sigtrap;                             # Wichtig!

# Schliessen wir uns an einige dynamisch ladbare Libraries an:
$libc = new C::DynaLib("-lc");     # Die C-Library
$libm = new C::DynaLib("-lm");     # Die Math-Library

# Deklarieren wir die Parameter der benoetigten Funktionen:
# $coderef = $libX->DeclareSub("funcname", $returntype, @paramtypes);
# Wobei:
# $coderef eine ausfuehrbare Codereferenz ist,
# "funcname" der Name der aufzurufenden C-Funktion ist,
# $returntype der Typ des Rueckgabewerts ist und
# @paramtypes die Typen der Parameter sind.
#
# Die Typen werden mit pack()-Templates angegeben:
#  "i": Integer, "p": Pointer, "": void, usw...

# /* Auf Solaris 2.6: */
# #incude <unistd.h>
# long pathconf(const char *path, int name);
require 'sys/unistd.ph';
$pathconf = $libc->DeclareSub("pathconf", "l", "p", "i");

# #include <math.h>
# double jn(int n, double x);
$bessel   = $libm->DeclareSub("jn", "d", "i", "d");

# Rufen wir nun diese Funktionen auf:
# Hier BesselJ(0,2): ist etwa .2238907791
$retval = $bessel->(0,2); print $retval, "\n";

# Siehe "man pathconf":
@PATHCONFSYMVALUES = qw(_PC_FILESIZEBITS _PC_LINK_MAX
    _PC_MAX_INPUT _PC_NAME_MAX _PC_PATH_MAX _PC_PIPE_BUF
    _PC_CHOWN_RESTRICTED _PC_NO_TRUNC _PC_VDISABLE
    _PC_ASYNC_IO _PC_PRIO_IO _PC_SYNC_IO);

print "Path: "; chomp($path = <STDIN>);
foreach $modename (@PATHCONFSYMVALUES) {
    $modeval = eval $modename;
    print $modename, "\t", $pathconf->($path, $modeval), "\n";
}
   

[Prev] [Up] [Relevant Chapter] [Next]

[Alte Quelle]


Last modified: $Date: 2006/05/18 12:55:56 $
FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy
FreeBSD Logo