Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

Q: What do you call a boomerang that doesn't come back? A: A stick.


rocksolid / de.comp.os.unix.programming / Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?

SubjectAuthor
* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Markus Schaaf
+- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?wolfgang bauer (D)
`* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Bonita Montero
 `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Bonita Montero
  `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Christian Weisgerber
   +- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Bonita Montero
   `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Florian Weimer
    `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Bonita Montero
     `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Florian Weimer
      +- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Bonita Montero
      `- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Helmut Waitzmann

1
Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Markus Schaaf
Newsgroups: de.comp.lang.c, de.comp.os.unix.programming
Followup: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Tue, 4 Jul 2023 11:48 UTC
References: 1
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: msch...@elaboris.de (Markus Schaaf)
Newsgroups: de.comp.lang.c,de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Followup-To: de.comp.os.unix.programming
Date: Tue, 4 Jul 2023 13:48:55 +0200
Organization: A noiseless patient Spider
Lines: 20
Message-ID: <u810v7$3bdg$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 4 Jul 2023 11:48:55 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="c3cc2280503dd0776dbf05d2b1f1c5e5";
logging-data="110000"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+qhhuE/s3NilEAzmMq/+iW"
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101
Thunderbird/102.12.0
In-Reply-To: <u80t6f$2ufe$1@dont-email.me>
Content-Language: de-DE, en-US
View all headers

Am 04.07.23 um 12:44 schrieb wolfgang bauer (D):

> Als ich einen Starter für eines meiner Programme (ein Konsolenprogramm) anlegte, vergaß ich, die
> Terminal-Option zu aktivieren.
>
> Nach Start erschien natürlich nichts, aber mein Programm lief "unsichtbar" und verbrauchte 100% CPU.
>
> Ich fand dann heraus, das es an einer Warteschleife liegt, welche per fgets bzw. scanf auf eine Eingabe wartet.
>
> Es scheint, das wenn das entspr. Programm NICHT mit einer Konsole gestartet wurde, diese Eingabefunktionen
> direkt zurückkehren und das Programm also in einer Endlosschleife festhängt.
>
> Frage: Wie kann ich feststellen, ob mein Programm mit oder ohne Konsole gestartet wurde ?

#include <unistd.h>
if( isatty( STDIN_FILENO )) /* ... */ ;

F'up2

MfG

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: wolfgang bauer (D)
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Tue, 4 Jul 2023 12:06 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: sch...@gmx.de (wolfgang bauer (D))
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Tue, 4 Jul 2023 14:06:19 +0200
Organization: A noiseless patient Spider
Lines: 13
Message-ID: <u811vr$3i9u$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 4 Jul 2023 12:06:19 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="f210a07c84785bba6ce7c083f7bbc081";
logging-data="117054"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19kEDi+ytfHiTTK0sNq7GX2pa/UyxkOaZ0="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.10.0
Cancel-Lock: sha1:aMP4MPpRXD7ZO6GwuQfaxgRMqew=
In-Reply-To: <u810v7$3bdg$1@dont-email.me>
Content-Language: de-DE
View all headers

04.07.23 , 13:48 , Markus Schaaf:

> #include <unistd.h>
> if( isatty( STDIN_FILENO )) /* ... */ ;

Danke ! Funktioniert. Genau das, was ich suchte.

--
Gruß, Greetings

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Bonita Montero
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Mon, 17 Jul 2023 16:46 UTC
References: 1 2
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bonita.M...@gmail.com (Bonita Montero)
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Mon, 17 Jul 2023 18:46:43 +0200
Organization: A noiseless patient Spider
Lines: 31
Message-ID: <u93r9i$19svl$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Mon, 17 Jul 2023 16:46:42 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="1921b66ea6d58a31332f96cde852b944";
logging-data="1373173"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19raTd5YN0YIHLziJTTBzieh8LXxeLv3+Y="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:d40PKzuVRyvJtczHKv/lAmsGou4=
In-Reply-To: <u810v7$3bdg$1@dont-email.me>
Content-Language: de-DE
View all headers

Am 04.07.2023 um 13:48 schrieb Markus Schaaf:
> Am 04.07.23 um 12:44 schrieb wolfgang bauer (D):
>
>> Als ich einen Starter für eines meiner Programme (ein
>> Konsolenprogramm) anlegte, vergaß ich, die
>> Terminal-Option zu aktivieren.
>>
>> Nach Start erschien natürlich nichts, aber mein Programm lief
>> "unsichtbar" und verbrauchte 100% CPU.
>>
>> Ich fand dann heraus, das es an einer Warteschleife liegt, welche per
>> fgets bzw. scanf auf eine Eingabe wartet.
>>
>> Es scheint, das wenn das entspr. Programm NICHT mit einer Konsole
>> gestartet wurde, diese Eingabefunktionen
>> direkt zurückkehren und das Programm also in einer Endlosschleife
>> festhängt.
>>
>> Frage: Wie kann ich feststellen, ob mein Programm mit oder ohne
>> Konsole gestartet wurde ?
>
> #include <unistd.h>
> if( isatty( STDIN_FILENO )) /* ... */ ;

Wenn man jetzt ganz pedantisch ist könnte man ja noch als Konsolen
-Start annehmen wollen wenn von der Shell das Stdin redirected wurde.
Das wäre unterscheidbar wenn man den Parent-Prozess ermittelt und
schaut ob dessen Handles auf eine Konsole zeigen. Ich drück das mal
so umgangssprachlich aus, denn wie das unter Unix geht weiß ich nicht,
aber unter Windows wüsste ich das mit aufwendigen Mitteln.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Bonita Montero
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Tue, 22 Aug 2023 14:02 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bonita.M...@gmail.com (Bonita Montero)
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Tue, 22 Aug 2023 16:02:15 +0200
Organization: A noiseless patient Spider
Lines: 39
Message-ID: <uc2f55$2ecut$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 22 Aug 2023 14:02:13 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="62bbf9da102e47dcc248bf7a87d7d8d8";
logging-data="2569181"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+blQjKAYJntF7IGNxstQAHS/cNAcT4PJ4="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:hnAiOaZHUpJM/RKx0AoOQBKtalA=
In-Reply-To: <u93r9i$19svl$1@dont-email.me>
Content-Language: de-DE
View all headers

Am 17.07.2023 um 18:46 schrieb Bonita Montero:
> Am 04.07.2023 um 13:48 schrieb Markus Schaaf:
>> Am 04.07.23 um 12:44 schrieb wolfgang bauer (D):
>>
>>> Als ich einen Starter für eines meiner Programme (ein
>>> Konsolenprogramm) anlegte, vergaß ich, die
>>> Terminal-Option zu aktivieren.
>>>
>>> Nach Start erschien natürlich nichts, aber mein Programm lief
>>> "unsichtbar" und verbrauchte 100% CPU.
>>>
>>> Ich fand dann heraus, das es an einer Warteschleife liegt, welche per
>>> fgets bzw. scanf auf eine Eingabe wartet.
>>>
>>> Es scheint, das wenn das entspr. Programm NICHT mit einer Konsole
>>> gestartet wurde, diese Eingabefunktionen
>>> direkt zurückkehren und das Programm also in einer Endlosschleife
>>> festhängt.
>>>
>>> Frage: Wie kann ich feststellen, ob mein Programm mit oder ohne
>>> Konsole gestartet wurde ?
>>
>> #include <unistd.h>
>> if( isatty( STDIN_FILENO )) /* ... */ ;
>
> Wenn man jetzt ganz pedantisch ist könnte man ja noch als Konsolen
> -Start annehmen wollen wenn von der Shell das Stdin redirected wurde.
> Das wäre unterscheidbar wenn man den Parent-Prozess ermittelt und
> schaut ob dessen Handles auf eine Konsole zeigen. Ich drück das mal
> so umgangssprachlich aus, denn wie das unter Unix geht weiß ich nicht,
> aber unter Windows wüsste ich das mit aufwendigen Mitteln.

Ich hab neulich ein "time ..." auf einen Prozess gehabt den ich
redirected hat. Interessanterweise wurde nur der Output des Programms
redirected, aber nicht das "time ..." selbst. Wie funktioniert denn
sowas programmiertechnisch ?
Unter Windows würd ich einfach den Parent-Prozess ermitteln und mir
das Konsolen-Handle von dem holen. Unter Linux - keine Ahnung.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Christian Weisgerber
Newsgroups: de.comp.os.unix.programming
Date: Tue, 22 Aug 2023 14:35 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!news.datentrampelpfad.de!akk.uni-karlsruhe.de!inti.inka.de!inka.de!mips.inka.de!.POSTED.localhost!not-for-mail
From: nad...@mips.inka.de (Christian Weisgerber)
Newsgroups: de.comp.os.unix.programming
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Tue, 22 Aug 2023 14:35:39 -0000 (UTC)
Message-ID: <slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
Injection-Date: Tue, 22 Aug 2023 14:35:39 -0000 (UTC)
Injection-Info: lorvorc.mips.inka.de; posting-host="localhost:::1";
logging-data="852"; mail-complaints-to="usenet@mips.inka.de"
User-Agent: slrn/1.0.3 (FreeBSD)
Lines: 12
View all headers

On 2023-08-22, Bonita Montero <Bonita.Montero@gmail.com> wrote:

> Ich hab neulich ein "time ..." auf einen Prozess gehabt den ich
> redirected hat. Interessanterweise wurde nur der Output des Programms
> redirected, aber nicht das "time ..." selbst. Wie funktioniert denn
> sowas programmiertechnisch ?

Wahrscheinlich hast du nur stdout umgelenkt; time schreibt aber auf
stderr.

--
Christian "naddy" Weisgerber naddy@mips.inka.de

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Bonita Montero
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Wed, 23 Aug 2023 13:40 UTC
References: 1 2 3 4 5
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bonita.M...@gmail.com (Bonita Montero)
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Wed, 23 Aug 2023 15:40:54 +0200
Organization: A noiseless patient Spider
Lines: 14
Message-ID: <uc5295$2ujqi$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 23 Aug 2023 13:40:53 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="8b1b1b4acfddfb487fd199c8bfd92750";
logging-data="3100498"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/0+1WcOBPfX32SsO+rqHKi8soJH99vbcY="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:nedAYhNjy4+LL3/QYCU1tpmiqNc=
Content-Language: de-DE
In-Reply-To: <slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
View all headers

Am 22.08.2023 um 16:35 schrieb Christian Weisgerber:
> On 2023-08-22, Bonita Montero <Bonita.Montero@gmail.com> wrote:
>
>> Ich hab neulich ein "time ..." auf einen Prozess gehabt den ich
>> redirected hat. Interessanterweise wurde nur der Output des Programms
>> redirected, aber nicht das "time ..." selbst. Wie funktioniert denn
>> sowas programmiertechnisch ?
>
> Wahrscheinlich hast du nur stdout umgelenkt; time schreibt aber auf
> stderr.

Interessant bzw. konnte ich auch jetzt so recherchieren.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Florian Weimer
Newsgroups: de.comp.os.unix.programming
Date: Tue, 29 Aug 2023 21:02 UTC
References: 1 2 3 4 5
Path: i2pn2.org!i2pn.org!usenet.goja.nl.eu.org!3.eu.feeder.erje.net!feeder.erje.net!news.szaf.org!news.enyo.de!.POSTED!not-for-mail
From: fw...@deneb.enyo.de (Florian Weimer)
Newsgroups: de.comp.os.unix.programming
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Tue, 29 Aug 2023 23:02:45 +0200
Message-ID: <87o7ipef4a.fsf@mid.deneb.enyo.de>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: news.enyo.de;
logging-data="519942"; mail-complaints-to="news@enyo.de"
Cancel-Lock: sha1:AT8ZAnGWovKDkOL211SuHUdeUyM=
View all headers

* Christian Weisgerber:

> On 2023-08-22, Bonita Montero <Bonita.Montero@gmail.com> wrote:
>
>> Ich hab neulich ein "time ..." auf einen Prozess gehabt den ich
>> redirected hat. Interessanterweise wurde nur der Output des Programms
>> redirected, aber nicht das "time ..." selbst. Wie funktioniert denn
>> sowas programmiertechnisch ?
>
> Wahrscheinlich hast du nur stdout umgelenkt; time schreibt aber auf
> stderr.

Manche Programme öffnen auch /dev/tty, z.B. um Paßwörter einzulesen.
Das gewöhnliche time-Programm und das Shell-Kommando dürften aber bloß
auf stderr schreiben.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Bonita Montero
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Wed, 30 Aug 2023 04:26 UTC
References: 1 2 3 4 5 6
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bonita.M...@gmail.com (Bonita Montero)
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Wed, 30 Aug 2023 06:26:25 +0200
Organization: A noiseless patient Spider
Lines: 6
Message-ID: <ucmgdh$2k69e$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de> <87o7ipef4a.fsf@mid.deneb.enyo.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 30 Aug 2023 04:26:25 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="1516dabee8f133ed8fc4a778f5a0be1a";
logging-data="2758958"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX18nY4MAaleOscUYXKRkxonChVnwSXR+GXY="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:XMB0kj75a+8NgxCvM0kQF0bImJk=
Content-Language: de-DE
In-Reply-To: <87o7ipef4a.fsf@mid.deneb.enyo.de>
View all headers

Am 29.08.2023 um 23:02 schrieb Florian Weimer:

> Manche Programme öffnen auch /dev/tty, z.B. um Paßwörter einzulesen.

Man kann auch einfach line-buffering und echoing von stdin abschalten.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Florian Weimer
Newsgroups: de.comp.os.unix.programming
Date: Wed, 30 Aug 2023 05:48 UTC
References: 1 2 3 4 5 6 7
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!news.szaf.org!news.enyo.de!.POSTED!not-for-mail
From: fw...@deneb.enyo.de (Florian Weimer)
Newsgroups: de.comp.os.unix.programming
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Wed, 30 Aug 2023 07:48:30 +0200
Message-ID: <878r9tqdw1.fsf@mid.deneb.enyo.de>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
<87o7ipef4a.fsf@mid.deneb.enyo.de> <ucmgdh$2k69e$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: news.enyo.de;
logging-data="528015"; mail-complaints-to="news@enyo.de"
Cancel-Lock: sha1:YS1NiCS/Ajb2i6IDeT6Q0poX6hs=
View all headers

* Bonita Montero:

> Am 29.08.2023 um 23:02 schrieb Florian Weimer:
>
>> Manche Programme öffnen auch /dev/tty, z.B. um Paßwörter einzulesen.
>
> Man kann auch einfach line-buffering und echoing von stdin abschalten.

Das funktioniert für less z.B. nicht, weil das andere Programm immer
noch von der Standardeingabe liest.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Bonita Montero
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Wed, 30 Aug 2023 11:28 UTC
References: 1 2 3 4 5 6 7 8
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Bonita.M...@gmail.com (Bonita Montero)
Newsgroups: de.comp.os.unix.programming
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Wed, 30 Aug 2023 13:28:46 +0200
Organization: A noiseless patient Spider
Lines: 7
Message-ID: <ucn95e$2nddb$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de> <87o7ipef4a.fsf@mid.deneb.enyo.de>
<ucmgdh$2k69e$1@dont-email.me> <878r9tqdw1.fsf@mid.deneb.enyo.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Wed, 30 Aug 2023 11:28:46 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="1516dabee8f133ed8fc4a778f5a0be1a";
logging-data="2864555"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+1vD97BXi1Kr5gRGQWt7Yw8FYcxUWZFgc="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:TWDgntGyqfOs7xa4uYsWeezYsY0=
In-Reply-To: <878r9tqdw1.fsf@mid.deneb.enyo.de>
Content-Language: de-DE
View all headers

Am 30.08.2023 um 07:48 schrieb Florian Weimer:

> Das funktioniert für less z.B. nicht, weil das andere Programm immer
> noch von der Standardeingabe liest.

Man kann auch wie bereits beschrieben feststellen ob stdin
wirklich an einer Konsole hängt und das fallweise unterscheiden.

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Helmut Waitzmann
Newsgroups: de.comp.os.unix.programming
Organization: A noiseless patient Spider
Date: Sat, 2 Sep 2023 00:08 UTC
References: 1 2 3 4 5 6 7 8
Path: i2pn2.org!i2pn.org!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: nn.throt...@xoxy.net (Helmut Waitzmann)
Newsgroups: de.comp.os.unix.programming
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Sat, 02 Sep 2023 02:08:42 +0200
Organization: A noiseless patient Spider
Lines: 143
Sender: Helmut Waitzmann <12f7e638@mail.de>
Message-ID: <83bkelcu7p.fsf@helmutwaitzmann.news.arcor.de>
References: <u80t6f$2ufe$1@dont-email.me> <u810v7$3bdg$1@dont-email.me>
<u93r9i$19svl$1@dont-email.me> <uc2f55$2ecut$1@dont-email.me>
<slrnue9htr.qj.naddy@lorvorc.mips.inka.de>
<87o7ipef4a.fsf@mid.deneb.enyo.de> <ucmgdh$2k69e$1@dont-email.me>
<878r9tqdw1.fsf@mid.deneb.enyo.de>
Reply-To: Helmut Waitzmann Anti-Spam-Ticket.b.qc3c <oe.throttle@xoxy.net>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: quoted-printable
Injection-Info: dont-email.me; posting-host="ae851eb9b81058dd24cec975fd65d893";
logging-data="80770"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19HCaz07Z8e7uaEzCK6oFC8M1hvY/LuGjA="
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/23.2 (gnu/linux)
Cancel-Lock: sha1:1EB/Z5ijLE6YKNu+v+bfHmdUfi0=
sha1:fgANiFVcjJxL+Esn65+Uc9XtjXk=
Mail-Reply-To: Helmut Waitzmann Anti-Spam-Ticket.b.qc3c <oe.throttle@xoxy.net>
Mail-Copies-To: nobody
View all headers

Florian Weimer <fw@deneb.enyo.de>:
> * Bonita Montero:
>
>> Am 29.08.2023 um 23:02 schrieb Florian Weimer:
>>
>>> Manche Programme öffnen auch /dev/tty, z.B. um Paßwörter
>>> einzulesen.
>>>
>>
>> Man kann auch einfach line-buffering und echoing von stdin
>> abschalten.
>>
>
> Das funktioniert für less z.B. nicht,
>

Das ist richtig, aber das folgende ist nicht der Grund dafür.

> weil das andere Programm immer noch von der Standardeingabe
> liest.
>

Der Grund dafür, dass „less“ das „/dev/tty“ öffnet, ist, dass es
im Fall, dass es ein „anderes Programm“ wie beispielsweise im
folgenden Shell‐Kommando

das_andere_Programm spuckt Ausgaben | less

gibt, als Standardeingabe nicht mehr das Terminal hat sondern die
Ausgabeseite des Pipes.  Möchte „less“ also vom Terminal seine
Steuerkommandos lesen, muss es sich das Terminal selber öffnen.

Eine andere Möglichkeit für „less“ wäre gewesen, ihm die Option
„--command-fd“ zu implementieren.  Dann könnte man es so
aufrufen:

{
das_andere_Programm spuckt Ausgaben 3<&- |
less --command-fd 3
} 3<&0

Wenn „das andere Programm“ auch noch vom Terminal liest, gibt es
natürlich Chaos.  Das kann aber weder dadurch behoben
werden, dass „less“ sich das Terminal noch mal selber öffnet,
noch dadurch, dass „less“ die Option „--command-fd“ hätte.

In einer Umgebung, in der ich mehrere (Pseudo‐)Terminals habe,
also beispielsweise in einer X11‐Umgebung mit „xterm“, kann ich
mir so helfen:

das_andere_Programm spuckt Ausgaben |
xterm -e sh -c -- 'exec 0<&3 3<&- && "$@"' sh less 3<&0

Zunächst eine kurze Erklärung zum Shell‐Kommando:  Die
Eingabeumlenkung „3<&0“ am Ende der Kommandozeile bewirkt, dass
die Ausgabeseite des pipes nicht nur über file descriptor Nummer
0 sondern ebensogut über file descriptor Nummer 3 ausgelesen
werden kann.  Das „xterm“, wenn es dann das gewünschte Programm,
hier: das Shell („sh -c -- …“) startet, reicht an das Shell nicht
seine eigene Standardeingabe weiter, sondern erzeugt ein neues
(Pseudo‐)Terminal und gibt dem Shell als Standardeingabe einen
Zugriff auf das neue Terminal mit.  Weil die alte Standardeingabe
aber auch noch über file descriptor Nummer 3 lesbar ist, kann das
Shell mittels „exec 0<& 3<&-“ seine Standardeingabe auf die alte
dem „xterm“ übergebene Standardeingabe zurückstellen und das so
an das „less“ weitergeben.

Das Kommando bewirkt, dass „less“ in einem eigenen „xterm“ läuft
und deshalb nicht versucht, vom selben Terminal wie
„das_andere_Programm“ zu lesen.  Ja, die Entwickler des guten
alten „xterm“s haben sich nicht erdreistet[1], einfach alle file
descriptors zu schließen, sondern sind konservativ vorgegangen: 
File descriptors, die das „xterm“ offen vorfindet, tastet es
nicht an, sondern lässt sie, wie sie sind.  Und das ist auch gut
so.

So kümmert sich das „xterm“ im angeführten Beispiel nicht darum,
dass file descriptor Nummer 3 zum Lesen geöffnet ist und schließt
es etwa, sondern lässt es einfach unangetastet offen und
reicht es dadurch ganz automatisch an das von ihm gestartete
Shell weiter.  Lust, das mal konkret auszuprobieren?  Dann nimm
dieses Beispiel:

cat |
xterm -e sh -c -- 'exec 0<&3 3<&- && "$@"' sh less 3<&0

Da läuft ein „cat“ mit Standardeingabe vom Terminal:  Man kann
also Text eintippen, der von „cat“ gelesen und ans „xterm“
weitergereicht wird.  Im „xterm“ läuft ein Shell, das zuerst eine
Eingabeumlenkung von file descriptor Nummer 0 auf Nummer 3 macht
und Nummer 3 schließt.  Dadurch kommen die Daten bei „less“ wie
gewohnt beim file descriptor Nummer 0 an.

[1] Vor Jahren habe ich dasselbe mal mit einem Gnome‐Terminal
versucht und bin gescheitert, weil die Entwickler des
Gnome‐Terminals der Meinung waren, das Gnome‐Terminal müsste beim
Start erst mal nach allen offenen file descriptors fahnden und
diese dann schließen.


rocksolid / de.comp.os.unix.programming / Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?

1
server_pubkey.txt

rocksolid light 0.9.12
clearnet tor