Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Schreiben auf descriptor 0 und 1

3 views
Skip to first unread message

Thomas Förster

unread,
Oct 23, 2001, 6:34:20 AM10/23/01
to
Hallo,

ich muss einem Programm, welches seine Eingabe per "descriptor 0 and 1"
erwartet, die benötigten daten
innerhalb meines C-Programmes zukommen lassen.

Mit popen() kann ich dem Programm zumindest auf STDIN (descriptor 0 ??) die
Daten schicken, wie aber
erreiche ich den descriptor 1?

Ich hab dazu leider noch nirgendwas was gefunden, ausser einem Perl-Script,
was wiederu etliche
CPAN-Module benötigt um das zu bewerkstelligen.

Hat jemand für mich eine Tipp? (manpage, link, c-programm usw.)

Danke,
Thomas

Felix von Leitner

unread,
Oct 23, 2001, 1:49:23 PM10/23/01
to
Thus spake Thomas Förster (pu...@madz.net):

> ich muss einem Programm, welches seine Eingabe per "descriptor 0 and 1"
> erwartet, die benötigten daten
> innerhalb meines C-Programmes zukommen lassen.

Lies die Unix-FAQ.

Thomas Förster

unread,
Oct 24, 2001, 5:11:30 AM10/24/01
to
HI,

"Felix von Leitner" <usenet-...@fefe.de> schrieb im Newsbeitrag
news:3bd5...@fefe.de...

Hab ich bereits getan und bin nicht fündig geworden.

Thomas

Stefan Reuther

unread,
Oct 24, 2001, 10:06:50 AM10/24/01
to
Hallo,

"Thomas Förster" <pu...@madz.net> wrote:
> ich muss einem Programm, welches seine Eingabe per "descriptor 0 and 1"
> erwartet, die benötigten daten
> innerhalb meines C-Programmes zukommen lassen.

Was ist das für ein beklopptes Programm? Sicher, daß der auch
auf Deskriptor 1 *Eingaben* haben will?

> Mit popen() kann ich dem Programm zumindest auf STDIN (descriptor 0 ??) die
> Daten schicken, wie aber
> erreiche ich den descriptor 1?

Einfache Lösung: `popen("programm 1>&0", "w")'.

Gute Lösung: Standard-pipe/fork/dup/exec Sequenz. Sollte nicht
jeder Unix-Programmierer mal eine Mikro-Shell programmiert haben? ;-)
Zum Beispiel so. Untested:
int fd0[2], fd1[2];
pid_t p;
FILE *fp0, *fp1;

pipe(fd0);
pipe(fd1);
if ((p = fork()) < 0) {
/* Fehler */
} else if (p == 0) {
dup(fd0[0], 0); /* Eingaben auf Descriptor 0 */
dup(fd1[0], 1); /* Eingaben auf Descriptor 1 */
close(fd0[0]); close(fd1[0]);
close(fd0[1]); close(fd1[1]);
execlp("programm", "programm", "arg", (char*) 0);
exit(1);
} else {
close(fd0[0]); close(fd1[0]);
fp0 = fdopen(fd0[1], "w");
fp1 = fdopen(fd1[1], "w");
/* Programm per `fp0' / `fp1' mit Eingaben füttern */
}
Oder so. Wobei ich trotzdem bezweifle, daß jemand Eingaben
per fd 1 will.


Stefan

Gunnar Ritter

unread,
Oct 24, 2001, 10:21:52 AM10/24/01
to
Stefan Reuther <sr...@inf.tu-dresden.de> wrote:

> Wobei ich trotzdem bezweifle, daß jemand Eingaben per fd 1 will.

»more« und »pg« wollen das traditionell.

Grüße,
Gunnar

Felix von Leitner

unread,
Oct 24, 2001, 9:56:20 AM10/24/01
to
Thus spake Thomas Förster (pu...@madz.net):
> > Lies die Unix-FAQ.
> Hab ich bereits getan und bin nicht fündig geworden.

Hast du ein Problem mit den Augen?

"4.5) How do I use popen() to open a process for reading AND writing?"

0 new messages