Thread Multi-Threading-Problem bei Dateizugriff (7 answers)
Opened by slyfox1972 at 2009-11-23 09:18

slyfox1972
 2009-11-23 09:18
#128461 #128461
User since
2009-11-23
1 Artikel
BenutzerIn
[default_avatar]
Hallo!

Ich entwickle gerade selber eine Upload-Progress-Bar...

Das Prinzip ist einfach: das CGI-Script, das die Dateien empfängt, schreibt die Zahl der empfangenen Bytes in eine Datei, per Javascript wird laufend ein anderes CGI-Script aufgerufen, das die Bytes ausliest.

Hier werden die Bytes geschrieben:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
my $query = CGI->new(\&hook, $sessid);
sub hook
{
  $my_file="/tmp/upload/$umid" . ".meta";
  open(PLOT,">$my_file") || die("This file will not open!");
  flock PLOT, 2; # lock file
  print PLOT $bytes_read;
  print PLOT "/";
  print PLOT $ENV{'CONTENT_LENGTH'};
  flock PLOT, 8; # unlock file
  close(PLOT);
}

Hier werden sie ausgelesen:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
$file = "/tmp/upload/" . $in{'session'} . ".meta";

$opened = open(DATA, "<$file") or die("can't open $file");
if($opened) {
  binmode DATA;
  $data = <DATA>;
  close(DATA);
  print $data;
}

Das Problem bei der Sache: Manchmal greifen beide Scripte gleichzeitig auf die Datei zu, und $data bekommt einen leeren String. Wie kann ich beide Scripte synchronisieren, so dass eine keine Konflikte gibt?

viele Grüße

Egon Schmid

View full thread Multi-Threading-Problem bei Dateizugriff