[Vienna-pm] STDOUT-Umleitung

Peter J. Holzer hjp at wsr.ac.at
Fri Jan 21 03:26:51 PST 2005


On 2005-01-21 10:49:03 +0100, Carl A. Schreiber wrote:
> Am Freitag, 21. Januar 2005 10:41 schrieb Thomas Klausner:
> > On Fri, Jan 21, 2005 at 10:31:58AM +0100, Carl A. Schreiber wrote:
> > > kann man eigentlich innerhalb eines Perl Programms herausfinden ob STDOUT
> > > 'aussen' (= beim Aufruf: ./bsp.pl >file.txt) in ein File umgeleitet
> > > wurde?
> >
> > Ich vermute nicht, weil das ja das OS macht. Perl selber gibt einfach was
> > auch immer nach STDOUT aus, aber das OS leitet das dann in file.txt um.
> Naja, ich dachte es gibt eine Möglichkeit herauszufinden wohin z.B. 
> letztendlich STDOUT zeigt, oder welche 'Identität' das (der?) Handle es hat.

Ja, die gibt es:

    perldoc -f -X
    perldoc -f stat


---8<------8<------8<------8<------8<------8<------8<------8<---
#!/usr/bin/perl 
use warnings;
use strict;

if (-f STDOUT) {
    print STDERR "STDOUT is a regular file\n";
}

if (-p STDOUT) {
    print STDERR "STDOUT is a pipe\n";
}

if (-c STDOUT) {
    print STDERR "STDOUT is a character device\n";
}

if (-t STDOUT) {
    print STDERR "STDOUT is a terminal\n";
}

my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
    $atime,$mtime,$ctime,$blksize,$blocks) = stat(STDOUT);

printf STDERR "STDOUT is on device %x, inode %x, mode %o\n",
	$dev, $ino, $mode;
---8<------8<------8<------8<------8<------8<------8<------8<---

bernon:~/tmp 12:22 104% ./stat_stdout 
STDOUT is a character device
STDOUT is a terminal
STDOUT is on device 9, inode a, mode 20620
bernon:~/tmp 12:22 105% ./stat_stdout | cat
STDOUT is a pipe
STDOUT is on device 7, inode 6cea12, mode 10600
bernon:~/tmp 12:22 106% ./stat_stdout > foo
STDOUT is a regular file
STDOUT is on device fd01, inode 70609, mode 100755

(Die -X Operatoren/Funktionen tun auch nichts anderes als stat aufrufen
und das Ergebnis auswerten).

> Meine Hoffnung ist gering

Aber sie wird nicht enttäuscht.

> aber Perl ist immer wieder überraschend, was alles geht..

Generell geht in Perl fast alles, was im darunterliegenden OS geht. Und
Unix kennt halt stat (In MS-DOS gab es das in eingeschränkter Form auch,
in Windows wird das wohl auch geben).

	hp

-- 
   _  | Peter J. Holzer      | If the code is old but the problem is new
|_|_) | Sysadmin WSR / LUGA  | then the code probably isn't the problem.
| |   | hjp at wsr.ac.at        |
__/   | http://www.hjp.at/   |     -- Tim Bunce on dbi-users, 2004-11-05
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 388 bytes
Desc: not available
Url : http://mail.pm.org/pipermail/vienna-pm/attachments/20050121/e961cfed/attachment.bin


More information about the Vienna-pm mailing list