Schrift
[thread]8470[/thread]

STDOUT nach Datei umleiten: kein Fehler, wenn Datei geloescht wird



<< >> 7 Einträge, 1 Seite
bloonix
 2006-11-03 17:48
#71368 #71368
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
Hallo Leute,

Code: (dl )
1
2
3
4
5
6
7
8
9
10
use strict;
use warnings;
use Fcntl;

sysopen(STDOUT, './foo.bar', O_WRONLY | O_APPEND | O_CREAT) or die $!;

while (1) {
  sleep 1;
  print "Hello World\n" or die $!;
}


Wenn ich nach Start des Skripts die Datei foo.bar lösche, dann
passiert nichts. Das Skript wird nicht beendet. So ganz verstehe ich das
nicht, da dies doch eigentlich der Fall sein müsste.

Gruss,
opi
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2006-11-03 23:39
#71369 #71369
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Die Datei ist gar nicht gelöscht, sie ist noch da, solange das Skript läuft. Beweis: schreib mal wesentlich mehr Daten nach STDOUT und beobachte die Partition mit df. Sogar wenn du foo.bar gelöscht hast, geht immer mehr Plattenplatz verloren! Das ist Unix-Semantik, solange es noch einen Filehandle gibt, der auf eine Datei verweist, ist die Datei noch da, nur nicht im Verzeichnislisting sichtbar.
esskar
 2006-11-04 00:41
#71370 #71370
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
es muss doch auch
Code: (dl )
print("Hello World\n") or die $!;

heißen!
pq
 2006-11-04 01:47
#71371 #71371
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=esskar,03.11.2006, 23:41]es muss doch auch
Code: (dl )
print("Hello World\n") or die $!;

heißen![/quote]wieso,
print "..." or die $!
ist schon in ordnung so.
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
bloonix
 2006-11-04 15:18
#71372 #71372
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
@ptk, na klar, du hast recht, warum habe ich da nicht dran
gedacht... das ist ein grund, weshalb manche deamonen
zwingend nach einem logrotate durchgestartet werden müssen
oder mit einem kommando muss mitgeteilt werden, dass die logs
neu geöffnet werden...

danke für den hinweis!\n\n

<!--EDIT|opi|1162646315-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
bloonix
 2006-11-04 15:20
#71373 #71373
User since
2005-12-17
1615 Artikel
HausmeisterIn
[Homepage]
user image
[quote=pq,04.11.2006, 00:47]print "..." or die $!
ist schon in ordnung so.[/quote]
wäre

Code: (dl )
print "Hello", " ", "World", "\n" or die $!


auch noch ok? Oder würde das die nur ausgelöst, wenn \n
nicht geschrieben werden konnte?\n\n

<!--EDIT|opi|1162647269-->
What is a good module? That's hard to say.
What is good code? That's also hard to say.
One man's Thing of Beauty is another's man's Evil Hack.
ptk
 2006-11-04 15:51
#71374 #71374
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
Einfach Deparse fragen:
Code: (dl )
1
2
$ perl -MO=Deparse -e 'print "Hello", " ", "World", "\n" or die $!'
die $! unless print 'Hello', ' ', 'World', "\n";
<< >> 7 Einträge, 1 Seite



View all threads created 2006-11-03 17:48.