Standard-Fehlerausgabe pipen

classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|

Standard-Fehlerausgabe pipen

Martin Steigerwald

Hallo,

ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe eines
Befehls pipen. Mein Ansatz ist:

strace free 1>/dev/null | cat

Doch das liefert nicht das gewünschte Ergebnis und sogar eine
Fehlermeldung:

ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffc6444) = -1 ENOTTY
(Inappropriate ioctl for device)

Selbst mit

strace free 1>/tmp/foo

scheint mir die Ausgabe nicht vollständig zu sein.

Ich möchte die Ausgabe von

strace free 2>/tmp/foo ; less /tmp/foo

jedoch ohne eine temporäre Datei anzulegen.

Wie sag ich der bash, dass sie den Dateideskriptor 2 (stderr) statt den
Dateideskriptor 1 (stdout) pipen soll?

Grüße,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Martin Wildgruber
Martin Steigerwald wrote:

> Hallo,
>
> ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe eines
> Befehls pipen. Mein Ansatz ist:
>
> strace free 1>/dev/null | cat
>
> Doch das liefert nicht das gewünschte Ergebnis und sogar eine
> Fehlermeldung:
>
> ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbffc6444) = -1 ENOTTY
> (Inappropriate ioctl for device)
>
> Selbst mit
>
> strace free 1>/tmp/foo
>
> scheint mir die Ausgabe nicht vollständig zu sein.
>
> Ich möchte die Ausgabe von
>
> strace free 2>/tmp/foo ; less /tmp/foo
>
> jedoch ohne eine temporäre Datei anzulegen.
>
> Wie sag ich der bash, dass sie den Dateideskriptor 2 (stderr) statt den
> Dateideskriptor 1 (stdout) pipen soll?
>
> Grüße,
>  
Hallo

Ich glaube so müsste es gehen...

#!/bin/bash
tty 2 > /pfad/zur/datei


MfG
Martin


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Wolf Wiegand
In reply to this post by Martin Steigerwald
Hallo,

Martin Steigerwald wrote:

> ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe eines
> Befehls pipen. Mein Ansatz ist:

So?

strace ls 2>&1 >/dev/null | less

hth, Wolf
--
KDE schafft es erfolgreich, alle Fehler der Benutzeroberfläche von Windows XP
noch spektakulärer nachzuahmen sowie vorher undenkbare Fehler neu zu
implementieren.


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Pierre Gillmann-2
In reply to this post by Martin Steigerwald
Moin,

> Wie sag ich der bash, dass sie den Dateideskriptor 2 (stderr) statt den
> Dateideskriptor 1 (stdout) pipen soll?

(strace free 1>/dev/null) 2>&1

Wenn du noch stdout loswerden willst, willst du stderr und stdout auf
stdout haben genügt:

strace free 1 2>&1

Zum nachlesen: selflinux unter Shellprogrammierung

cheers
  Pierre

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Christian Paul
In reply to this post by Martin Steigerwald
Am Dienstag, 5. September 2006 12:40 schrieb Martin Steigerwald:
> Hallo,
>
> ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe eines
> Befehls pipen. Mein Ansatz ist:
>
> strace free 1>/dev/null | cat
>
> Doch das liefert nicht das gewünschte Ergebnis und sogar eine
> Fehlermeldung:
[..]
Ich empfehle zur Lektüre:
http://www.thomashertweck.de/redir.html
hat mir zum Verständnis weitergeholfen.

Gruß
Christian Paul

--
Jedesmal aber, wenn ein Staatsoberhaupt von Gott spricht, [...] kann man
sicher sein, daß er sich vorbereitet, seine Volksherde von neuem zu
scheren. (Michail Bakunin)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Martin Steigerwald
Am Dienstag 05 September 2006 21:29 schrieb Christian Paul:

> Am Dienstag, 5. September 2006 12:40 schrieb Martin Steigerwald:
> > Hallo,
> >
> > ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe
> > eines Befehls pipen. Mein Ansatz ist:
> >
> > strace free 1>/dev/null | cat
> >
> > Doch das liefert nicht das gewünschte Ergebnis und sogar eine
> > Fehlermeldung:
>
> [..]
> Ich empfehle zur Lektüre:
> http://www.thomashertweck.de/redir.html
> hat mir zum Verständnis weitergeholfen.

Hallo,

vielen Dank für die ganzen  Hinweise!

martin@deepdance:~ -> strace free 2>test
             total       used       free     shared    buffers     cached
Mem:        775136     753772      21364          0          0     404264
-/+ buffers/cache:     349508     425628
Swap:       979924      74992     904932


Die vier Writes möchte ich haben:

martin@deepdance:~ -> tail -n8 test
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0xb7f7b000
write(1, "             total       used   "..., 74) = 74
write(1, "Mem:        775136     753772   "..., 74) = 74
write(1, "-/+ buffers/cache:     349508   "..., 41) = 41
write(1, "Swap:       979924      74992   "..., 41) = 41
munmap(0xb7f7b000, 4096)                = 0
exit_group(0)                           = ?
Process 3719 detached


Genau das bekomme ich mit keiner dieser Varianten hin:

strace free 2>&1 >/dev/null | tail -n8
(strace free 1>/dev/null) 2>&1 | tail -n8
strace free 2>&1 1>/dev/null | tail -n8


Ich erhalte immer:

martin@deepdance:~ -> strace free 2>&1 1>/dev/null | tail -n8
read(3, "MemTotal:       775136 kB\nMemFre"..., 1023) = 598
fstat64(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbff83c74) = -1 ENOTTY
(Inappropriate ioctl for device)
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
= 0xb7eea000
write(1, "             total       used   "..., 230) = 230
munmap(0xb7eea000, 4096)                = 0
exit_group(0)                           = ?
Process 6464 detached

Da ist nur der erste Write und eben die Fehlermeldung zu dem ioctl-Call,
der aber im der obigen test-Datei nicht ausgeführt wird.


Tolle Kniffel-Aufgabe, oder? Komischerweise ging es einmal mit der letzten
Variante, aber das konnte ich dann nicht reproduzieren...

Ich glaub langsam, dass da strace einfach nicht mitspielt... vielleicht
ist der ioctl von strace und nicht von free... Könnte das ein Bug sein?
Oder einfach ein Nebeneffekt von strace? Meinungen?

Denn so gehts:

martin@deepdance:~ -> cat ausgabe.sh
#!/bin/bash
echo "Dies ist eine Ausgabe auf stdout." >&1
echo "Dies ist eine Ausgabe auf stderr." >&2
martin@deepdance:~ -> ./ausgabe.sh 2>/dev/null
Dies ist eine Ausgabe auf stdout.
martin@deepdance:~ -> (./ausgabe.sh 1>/dev/null) 2>&1
Dies ist eine Ausgabe auf stderr.
martin@deepdance:~ -> ./ausgabe.sh 2>&1 1>/dev/null
Dies ist eine Ausgabe auf stderr.
martin@deepdance:~ -> ./ausgabe.sh 1>/dev/null 2>&1

Nur die letzte Variante geht nicht, was anhand der von Dir empfohlenen
Lektüre verständlich ist.

Grüße,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Robert Fischer-4
Martin Steigerwald wrote:

> Ich glaub langsam, dass da strace einfach nicht mitspielt... vielleicht
> ist der ioctl von strace und nicht von free... Könnte das ein Bug sein?
> Oder einfach ein Nebeneffekt von strace? Meinungen?

vielleicht hilft dir die strace Option "-o" weiter (siehe strace manpage)

ciao,
Robert


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Wolf Wiegand
In reply to this post by Martin Steigerwald
Hallo,

Martin Steigerwald wrote:

> Die vier Writes möchte ich haben:

Warum eigentlich (so nebenbei)?

> martin@deepdance:~ -> tail -n8 test
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0xb7f7b000
> write(1, "             total       used   "..., 74) = 74
> write(1, "Mem:        775136     753772   "..., 74) = 74
> write(1, "-/+ buffers/cache:     349508   "..., 41) = 41
> write(1, "Swap:       979924      74992   "..., 41) = 41
> munmap(0xb7f7b000, 4096)                = 0
> exit_group(0)                           = ?
> Process 3719 detached
>
> [...]
>
> Ich erhalte immer:
>
> martin@deepdance:~ -> strace free 2>&1 1>/dev/null | tail -n8
> read(3, "MemTotal:       775136 kB\nMemFre"..., 1023) = 598
> fstat64(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
> ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbff83c74) = -1 ENOTTY
> (Inappropriate ioctl for device)
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0xb7eea000
> write(1, "             total       used   "..., 230) = 230
> munmap(0xb7eea000, 4096)                = 0
> exit_group(0)                           = ?
> Process 6464 detached
>
> Da ist nur der erste Write und eben die Fehlermeldung zu dem ioctl-Call,
> der aber im der obigen test-Datei nicht ausgeführt wird.

Der ioctl schlägt fehl, als Folge wird ein anderer (nicht nur der erste)
write-Befehl ausgeführt. Bei diesem write werden einmal 230 Zeichen
ausgegeben, beim ersten write 74+74+41+41 Zeichen.
 
> Ich glaub langsam, dass da strace einfach nicht mitspielt... vielleicht
> ist der ioctl von strace und nicht von free... Könnte das ein Bug sein?
> Oder einfach ein Nebeneffekt von strace? Meinungen?

Ich denke, das ist ein Nebeneffekt der Ausgabeumleitung, evtl. in
Verbindung von strace.

Wolf
--
Büroschimpfwort des Tages: Vorkoster - Mitarbeiter, der pünktlich zur
Kantinenöffnung Mittagspause macht. (Henrik Karcher)


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Martin Steigerwald
In reply to this post by Martin Steigerwald
Am Dienstag 05 September 2006 23:06 schrieb Martin Steigerwald:

> Am Dienstag 05 September 2006 21:29 schrieb Christian Paul:
> > Am Dienstag, 5. September 2006 12:40 schrieb Martin Steigerwald:
> > > Hallo,
> > >
> > > ich möchte gerne mit der Bash (3.1-5)  die Standard-Fehler-Ausgabe
> > > eines Befehls pipen. Mein Ansatz ist:
> > >
> > > strace free 1>/dev/null | cat
> > >
> > > Doch das liefert nicht das gewünschte Ergebnis und sogar eine
> > > Fehlermeldung:
> >
> > [..]
> > Ich empfehle zur Lektüre:
> > http://www.thomashertweck.de/redir.html
> > hat mir zum Verständnis weitergeholfen.
>
> Hallo,
>
> vielen Dank für die ganzen  Hinweise!
>
> martin@deepdance:~ -> strace free 2>test
>              total       used       free     shared    buffers    
> cached Mem:        775136     753772      21364          0          0  
>   404264 -/+ buffers/cache:     349508     425628
> Swap:       979924      74992     904932
>
>
> Die vier Writes möchte ich haben:
>
> martin@deepdance:~ -> tail -n8 test
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
> 0) = 0xb7f7b000
> write(1, "             total       used   "..., 74) = 74
> write(1, "Mem:        775136     753772   "..., 74) = 74
> write(1, "-/+ buffers/cache:     349508   "..., 41) = 41
> write(1, "Swap:       979924      74992   "..., 41) = 41
> munmap(0xb7f7b000, 4096)                = 0
> exit_group(0)                           = ?
> Process 3719 detached
>
>
> Genau das bekomme ich mit keiner dieser Varianten hin:
>
> strace free 2>&1 >/dev/null | tail -n8
> (strace free 1>/dev/null) 2>&1 | tail -n8
> strace free 2>&1 1>/dev/null | tail -n8
>
>
> Ich erhalte immer:
>
> martin@deepdance:~ -> strace free 2>&1 1>/dev/null | tail -n8
> read(3, "MemTotal:       775136 kB\nMemFre"..., 1023) = 598
> fstat64(1, {st_mode=S_IFCHR|0666, st_rdev=makedev(1, 3), ...}) = 0
> ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbff83c74) = -1 ENOTTY
> (Inappropriate ioctl for device)
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1,
> 0) = 0xb7eea000
> write(1, "             total       used   "..., 230) = 230
> munmap(0xb7eea000, 4096)                = 0
> exit_group(0)                           = ?
> Process 6464 detached
>
> Da ist nur der erste Write und eben die Fehlermeldung zu dem
> ioctl-Call, der aber im der obigen test-Datei nicht ausgeführt wird.
>
>
> Tolle Kniffel-Aufgabe, oder? Komischerweise ging es einmal mit der
> letzten Variante, aber das konnte ich dann nicht reproduzieren...
>
> Ich glaub langsam, dass da strace einfach nicht mitspielt... vielleicht
> ist der ioctl von strace und nicht von free... Könnte das ein Bug sein?
> Oder einfach ein Nebeneffekt von strace? Meinungen?

Hallo nochmal,

also ich hab vermutet, dass es nicht geht, weil strace ein tty braucht und
dies nicht bekommt, wenn man /dev/null verwendet. Das könnte es sein:

"strace free 1>test" geht ohne Fehler, während "strace free 1>/dev/null"
den Fehler wirft.


Warum es dann nur noch ein write() ist, ist klar:

martin@deepdance:~ -> strace free 2>&1 | tail -n8
write(1, "             total       used   "..., 230             total      
used       free     shared    buffers     cached
Mem:        775136     754948      20188          0          0     405904
-/+ buffers/cache:     349044     426092
Swap:       979924      74912     905012
) = 230
munmap(0xb7f2b000, 4096)                = 0
exit_group(0)                           = ?
Process 12573 detached


Bei Umleitung werden für printf (von free verwenndet) offenbar größere
Buffer verwendet und der ganze Text mit einem write()-Aufruf ausgegeben.
Was ja auch Sinn macht, wenn es nicht auf eine zeilenweise Aufgabe
ankommt. Wobei man den Unterschied wahrscheinlich nicht sehen kann.

Na, wieder was gelernt ;).

Grüße,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Martin Steigerwald
In reply to this post by Wolf Wiegand
Am Dienstag 05 September 2006 23:23 schrieb Wolf Wiegand:
> Hallo,
>
> Martin Steigerwald wrote:
> > Die vier Writes möchte ich haben:
>
> Warum eigentlich (so nebenbei)?

Hallo Wolf,

nur für ein cooles Bildschirmfoto für meinen nächsten Linux
User-Artikel ;-). Sieht doch irgendwie doof aus, wenn es über den Umweg
einer temporären Datei geht.

> > Da ist nur der erste Write und eben die Fehlermeldung zu dem
> > ioctl-Call, der aber im der obigen test-Datei nicht ausgeführt wird.
>
> Der ioctl schlägt fehl, als Folge wird ein anderer (nicht nur der
> erste) write-Befehl ausgeführt. Bei diesem write werden einmal 230
> Zeichen ausgegeben, beim ersten write 74+74+41+41 Zeichen.

Nee, ich glaub der andere Write-Befehl wird wg. der Ausgabe-Umleitung
ausgeführt. Der fehlgeschlagene ioctl ist nur als Ablenkung gedacht ;)

> > Ich glaub langsam, dass da strace einfach nicht mitspielt...
> > vielleicht ist der ioctl von strace und nicht von free... Könnte das
> > ein Bug sein? Oder einfach ein Nebeneffekt von strace? Meinungen?
>
> Ich denke, das ist ein Nebeneffekt der Ausgabeumleitung, evtl. in
> Verbindung von strace.

strace mag /dev/null nicht ;)... wobei ich das noch nicht ganz kapier:

Ich dachte ein tty ist ein Terminal und zwar eigentlich nur eines auf
einer "echten" Console, da die in KDE Konsole ja als pts gehandhabt
werden.  Eine Datei ist doch ebensowenig ein tty wie /dev/null oder gibts
da noch einen diffiziellen Unterschied?

Grüße,
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Martin Steigerwald
In reply to this post by Robert Fischer-4
Am Dienstag 05 September 2006 23:12 schrieb Robert Fischer:
> Martin Steigerwald wrote:
> > Ich glaub langsam, dass da strace einfach nicht mitspielt...
> > vielleicht ist der ioctl von strace und nicht von free... Könnte das
> > ein Bug sein? Oder einfach ein Nebeneffekt von strace? Meinungen?
>
> vielleicht hilft dir die strace Option "-o" weiter (siehe strace
> manpage)

Hallo Robert,

die pipts (uh ah) es aber nicht ;)

Ab in Heia mit mir, is besser so...
--
Martin 'Helios' Steigerwald - http://www.Lichtvoll.de
GPG: 03B0 0D6C 0040 0710 4AFA  B82F 991B EAAC A599 84C7

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Wolf Wiegand
In reply to this post by Martin Steigerwald
Hallo,

Martin Steigerwald wrote:

> Ich dachte ein tty ist ein Terminal und zwar eigentlich nur eines auf
> einer "echten" Console, da die in KDE Konsole ja als pts gehandhabt
> werden.  Eine Datei ist doch ebensowenig ein tty wie /dev/null oder gibts
> da noch einen diffiziellen Unterschied?

Irgendwie interessiert mich das jetzt auch :-) So weit ich weiß (ich
lasse mich aber sehr gerne korrigieren), zählt ein pts auch als tty. Ein
kurzer Test:

wolf@denkbrett:/tmp $ cat test.c
#include <stdio.h>
#include <unistd.h>

int main(){
        if (!isatty(STDERR_FILENO))
                printf("stderr is not a tty\n");
        else
                printf("stderr is a tty\n");
        printf("test\n");
}
wolf@denkbrett:/tmp $ ./test
stderr is a tty
test
wolf@denkbrett:/tmp $ ./test 2>/dev/null
stderr is not a tty
test

Bei diesem Minimalbeispiel kann man auch das gleiche wie bei
dem 'strace free' beobachten (auf den relevanten Teil gekürzt):

wolf@denkbrett:/tmp $ strace ./test
write(1, "stderr is a tty\n", 16stderr is a tty
)       = 16
write(1, "test\n", 5test
)                   = 5
wolf@denkbrett:/tmp $ strace ./test 2>&1 >/dev/null
ioctl(1, SNDCTL_TMR_TIMEBASE or TCGETS, 0xbfc8be14) = -1 ENOTTY (Inappropriate ioctl for device)
write(1, "stderr is a tty\ntest\n", 21) = 21

Hier wird's jetzt wackelig :-) Ich kann mir gut vorstellen, dass es in
der libc (die ja letztendlich die printf()-Aufrufe aus 'free' und dem
obigen Testprogramm in die write()-Aufrufe umsetzt) prüft, wohin
geschrieben werden soll. Wenn es sich um ein Terminal handelt ->
ungepuffert schreiben (= 2x write), ansonst gepuffert schreiben (= 1x
write). So wird die Anzahl der Syscalls reduziert, solange nicht jemand
gerade auf's Terminal guckt, der ja Ausgaben sofort sehen will.

So, gute Nacht,

Wolf
--
Ich halte mich für unersetzlich, andererseits sieht man ja, dass die Friedhöfe
voll sind von Unersetzlichen... (Günther Jauch)


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Jörg Sommer
In reply to this post by Martin Steigerwald
Hallo Martin,

Martin Steigerwald <[hidden email]> wrote:

> vielen Dank für die ganzen  Hinweise!
>
> martin@deepdance:~ -> strace free 2>test
>              total       used       free     shared    buffers     cached
> Mem:        775136     753772      21364          0          0     404264
> -/+ buffers/cache:     349508     425628
> Swap:       979924      74992     904932
>
>
> Die vier Writes möchte ich haben:
>
> martin@deepdance:~ -> tail -n8 test
> mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0)
> = 0xb7f7b000
> write(1, "             total       used   "..., 74) = 74
> write(1, "Mem:        775136     753772   "..., 74) = 74
> write(1, "-/+ buffers/cache:     349508   "..., 41) = 41
> write(1, "Swap:       979924      74992   "..., 41) = 41
> munmap(0xb7f7b000, 4096)                = 0
> exit_group(0)                           = ?
> Process 3719 detached

% strace -e write free 2>&1 >/dev/tty | less

Das versaut dir zwar den Bildschirm, aber mir fällt nichts besseres ein.
Du wirst wahrscheinlich Opfer einer Optimierung in der libc, die prüft,
ob die Standardausgabe eine Konsole ist und wenn nicht puffert es die
Ausgabe etwas mehr – erspart unter Umständen etwas, da nur ein
System‐Call write gemacht werden muss. Eine Ebene höher – im free – ist
das nämlich ein printf – siehe ltrace -S.

Nächtliche Grüße, Jörg.
--
Der Klügere gibt nach ....
..deshalb regieren die Dummen die Welt!


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Jörg Sommer
In reply to this post by Martin Steigerwald
Hallo Martin,

Martin Steigerwald <[hidden email]> wrote:
> Bei Umleitung werden für printf (von free verwenndet) offenbar größere
> Buffer verwendet und der ganze Text mit einem write()-Aufruf ausgegeben.
> Was ja auch Sinn macht,

Sinn kann man nicht machen!

> wenn es nicht auf eine zeilenweise Aufgabe ankommt. Wobei man den
> Unterschied wahrscheinlich nicht sehen kann.

Den Unterschied sollst du auch nicht sehen, sonst könnte man die
Optimierung nicht machen. Den Unterschied /könntest/ du aber spüren,
denn er werden statt einem System-Call (bei der Optimierung) vier ohne
die Optimierung gemacht.

Schöne Grüße, Jörg.
--
Mathematiker beim Kuchenessen (aus dem wahren Leben):
J: Du überlegst wohl, wie du das Stück optimal teilst?
K: Ja, ich wende gerade den Simplex-Algorithmus darauf an.
C: Schau mal, da hast du schon vier Ecken.


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

linux4michelle
In reply to this post by Martin Steigerwald
Am 2006-09-05 12:40:49, schrieb Martin Steigerwald:

> Ich möchte die Ausgabe von
>
> strace free 2>/tmp/foo ; less /tmp/foo

strace free 1>/dev/tty 2>&1 |<some-progi>

D.h.: 1>/dev/tty pipe STDOUT nach /dev/tty
        2>&1 pipe was übrigbleibt (STDERR) nach STDOUT
       
Thanks, Greetings and nice Day
    Michelle Konzack
    Systemadministrator
    Tamay Dogan Network
    Debian GNU/Linux Consultant


--
Linux-User #280138 with the Linux Counter, http://counter.li.org/
##################### Debian GNU/Linux Consultant #####################
Michelle Konzack   Apt. 917                  ICQ #328449886
                   50, rue de Soultz         MSM LinuxMichi
0033/6/61925193    67100 Strasbourg/France   IRC #Debian (irc.icq.com)


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)

Reply | Threaded
Open this post in threaded view
|

Re: Standard-Fehlerausgabe pipen

Jörg Sommer
Hallo Michelle,

Michelle Konzack <[hidden email]> wrote:
> Am 2006-09-05 12:40:49, schrieb Martin Steigerwald:
>
>> Ich möchte die Ausgabe von
>>
>> strace free 2>/tmp/foo ; less /tmp/foo
>
> strace free 1>/dev/tty 2>&1 |<some-progi>

Sicher, dass die Reihenfolge stimmt? Da steht: Biege stdout um und
verwende als stderr das, was du als stdout verwendest. Die Pipe sollte
also leer ausgehen.

Schöne Grüße, Jörg.
--
Der Hase läuft schneller als der Fuchs,
denn der Hase läuft um sein Leben.


--
Haeufig gestellte Fragen und Antworten (FAQ):
http://www.de.debian.org/debian-user-german-FAQ/

Zum AUSTRAGEN schicken Sie eine Mail an [hidden email]
mit dem Subject "unsubscribe". Probleme? Mail an [hidden email] (engl)