[quote=RalphFFM,13.04.2007, 12:22]sobald ein Skript sich beendet, werden m.W. alle durch das Skript geöffneten Ports geschlossen. (glaube ich)[/quote]
Das ist in dieser Form nicht ganz richtig. Wenn das Skript sich beendet (also ueber exit oder ein Signal, fuer exec siehe weiter unten), werden all seine Dateideskriptoren geschlossen. Wenn ein Dateideskriptor zu einem Socket gehoert
und kein anderer Prozess einen Dateideskriptor fuer dieses Socket hat, wird das Socket geschlossen. Es kann aus mehreren Gruenden mehr als ein Prozess ein Socket geoeffnet haben:
1) Durch Forking hat der Kindprozess dieselben Dateideskriptoren wie der Elternprozess
2) Prozesse koennen Dateideskriptoren ueber Unix-Domain-Sockets an andere Prozesse schicken. (Ich habe dazu hier im Forum auch mal irgendwann ein Beispiel gepostet, das koennte ich bei Bedarf mal raussuchen.) (Update:
Hier ist es)
[quote=Strat,17.04.2007, 00:53]wenn, dann kann's vielleicht exec (aber ich glaub's nicht, und selbst wenn, weiss ich nicht, wie man aus dem zweiten programm an den port drankommt...)[/quote]
Das ist in der Tat auch moeglich und gar nicht so schwer zu realisieren. Hier habe ich zwei Scripte; das erste oeffnet eine Datei und fuehrt dann das zweite Script ueber exec aus, welches dann aus der Datei eine Zeile liest.
1
2
3
4
5
6
7
8
9
10
11
12
use strict;
use warnings;
use Fcntl;
open my $f, '<', '/etc/inittab' or die $!;
fcntl($f, F_SETFD, (~FD_CLOEXEC) & (fcntl($f, F_GETFD, 0))) or die $!;
exec('./script2.pl', fileno($f)) or die $!;
1
2
3
4
5
6
7
8
9
10
11
12
13
use strict;
use warnings;
my ($fileno) = @ARGV or die;
open my $f, '<&', $fileno or die $!;
my $line = <$f>;
die $! unless defined $line;
print "first line: $line";
(
Disclaimer: Das bezog sich alles auf Un*x-Systeme, nix Windows)
Edit: Ich hatte aus Versehen zweimal das gleiche Script gepastet.\n\n
<!--EDIT|betterworld|1176799379-->