Rocksolid Light

groups  faq  privacy  How to post  login

Message-ID:  

Another good night not to sleep in a eucalyptus tree.


rocksolid / de.comp.lang.c / Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?

SubjectAuthor
* Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?wolfgang bauer (D)
+- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Markus Schaaf
`* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Thomas Koenig
 `* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?wolfgang bauer (D)
  +* Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Stefan Reuther
  |`- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Thomas Koenig
  `- Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?Peter J. Holzer

1
Subject: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: wolfgang bauer (D)
Newsgroups: de.comp.lang.c
Organization: A noiseless patient Spider
Date: Tue, 4 Jul 2023 10:44 UTC
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.lang.c
Subject: Linux:_Test,_ob_Programm_über_Terminal_gestartet
_wurde._Wie_?
Date: Tue, 4 Jul 2023 12:44:31 +0200
Organization: A noiseless patient Spider
Lines: 25
Message-ID: <u80t6f$2ufe$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 10:44:31 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="f210a07c84785bba6ce7c083f7bbc081";
logging-data="96750"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19t/ryehLMQkN2QfAGLrs/0tpe7K2C+1xQ="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.10.0
Cancel-Lock: sha1:u2OQlmWoK9oIKX8TffMq9aAZ8wM=
X-Mozilla-News-Host: news://reader80.eternal-september.org:119
Content-Language: de-DE
View all headers

Hallo

Ich arbeite hier unter Linux (Cinnamon).

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 ?

Die Lösungen aus diesem Thread helfen hier nicht weiter:

https://stackoverflow.com/questions/6839508/test-if-stdin-has-input-for-c-windows-and-or-linux

--
Gruß, Greetings

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: Thomas Koenig
Newsgroups: de.comp.lang.c
Organization: news.netcologne.de
Date: Tue, 4 Jul 2023 13:07 UTC
References: 1
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd4-c42d-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de!not-for-mail
From: tkoe...@netcologne.de (Thomas Koenig)
Newsgroups: de.comp.lang.c
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Tue, 4 Jul 2023 13:07:46 -0000 (UTC)
Organization: news.netcologne.de
Distribution: world
Message-ID: <u815j2$46cs$1@newsreader4.netcologne.de>
References: <u80t6f$2ufe$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 13:07:46 -0000 (UTC)
Injection-Info: newsreader4.netcologne.de; posting-host="2001-4dd4-c42d-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de:2001:4dd4:c42d:0:7285:c2ff:fe6c:992d";
logging-data="137628"; mail-complaints-to="abuse@netcologne.de"
User-Agent: slrn/1.0.3 (Linux)
View all headers

wolfgang bauer (D) <schutz@gmx.de> schrieb:
>
> Hallo
>
> Ich arbeite hier unter Linux (Cinnamon).
>
> 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.

Prinzipiell ist es gute Praxis in C, sich die Rückgabewerte von
Eingabefunktionen anzuschauen und entsprechend zu reagieren,
wenn was nicht stimmt.

Andere Sprachen brechen bei missingender Eingabe mit Fehler ab,
aber die I/O - Funktionen von C schieben die ganze Verantwortung
auf dem Programmierer. Muss man nicht mögen, aber wenn man C
verwendet, sollte man sich drauf einstellen.

Eine Schleife in der From

/* Irgendwann muss der User doch mal was vernünftiges eingeben... */
while (scanf(...) == 0)
;

ist halt bei EOF oder einer Fehlerbedingung eine Endlosschleife.

> 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.

Sie geben dann 0 bzw NULL zurück.

> Frage: Wie kann ich feststellen, ob mein Programm mit oder ohne
> Konsole gestartet wurde ?

Innerhalb der C-Norm: Gar nicht. Innerhalb von POSIX: isatty().

Aber willst du tatsächlich, das das Programm nur interaktiv
funktioniert und z.B. nicht aus einer Datei oder von einer Pipe
gefüttert werden kann? Hat dein Anwendungsfall Besonderheiten,
die nur interaktive Ausführung interessant machen?

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: wolfgang bauer (D)
Newsgroups: de.comp.lang.c
Organization: A noiseless patient Spider
Date: Tue, 4 Jul 2023 14:54 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.lang.c
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Tue, 4 Jul 2023 16:54:30 +0200
Organization: A noiseless patient Spider
Lines: 30
Message-ID: <u81br7$4ghs$1@dont-email.me>
References: <u80t6f$2ufe$1@dont-email.me>
<u815j2$46cs$1@newsreader4.netcologne.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 4 Jul 2023 14:54:31 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="f210a07c84785bba6ce7c083f7bbc081";
logging-data="148028"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1//EWzU65Mx6mAD2w4zPD3Q5e4FxnIH6Vc="
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101
Thunderbird/68.10.0
Cancel-Lock: sha1:OlFneYpxLt7G7T9bQrJNdCSX5fA=
Content-Language: de-DE
In-Reply-To: <u815j2$46cs$1@newsreader4.netcologne.de>
View all headers

04.07.23 , 15:07 , Thomas Koenig:

>> Ich fand dann heraus, das es an einer Warteschleife liegt,
>> welche per fgets bzw. scanf auf eine Eingabe wartet.
>
> Prinzipiell ist es gute Praxis in C, sich die Rückgabewerte von
> Eingabefunktionen anzuschauen und entsprechend zu reagieren,
> wenn was nicht stimmt.

Ja. Manchmal ist man unbewusst zu faul. Aber nur manchmal ;-)

Die hier vorgeschlagene Methode per "isatty" erspart mir im vorliegenden Fall
weitere Anpassungen so das ich die Schleife lasse, wie sie ist. Ansonsten
muss ich mir wirklich angewöhnen, die Rückgabewerte zu beachten.

> Aber willst du tatsächlich, das das Programm nur interaktiv
> funktioniert und z.B. nicht aus einer Datei oder von einer Pipe
> gefüttert werden kann? Hat dein Anwendungsfall Besonderheiten,
> die nur interaktive Ausführung interessant machen?

Ja. Das ist hier Absicht. Das Programm holt sich zwar Daten aus Dateien,
aber es gehört hier zum Bedienkonzept, das es dann per Konsole gesteuert wird.

--
Gruß, Greetings

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Stefan Reuther
Newsgroups: de.comp.lang.c
Date: Tue, 4 Jul 2023 16:04 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!usenet.goja.nl.eu.org!3.eu.feeder.erje.net!feeder.erje.net!news-2.dfn.de!news.dfn.de!fu-berlin.de!uni-berlin.de!individual.net!not-for-mail
From: stefan.n...@arcor.de (Stefan Reuther)
Newsgroups: de.comp.lang.c
Subject: Re:_Linux:_Test,_ob_Programm_über_Terminal_ges
tartet_wurde._Wie_?
Date: Tue, 4 Jul 2023 18:04:41 +0200
Lines: 26
Message-ID: <u81mvq.104.1@stefan.msgid.phost.de>
References: <u80t6f$2ufe$1@dont-email.me>
<u815j2$46cs$1@newsreader4.netcologne.de> <u81br7$4ghs$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit
X-Trace: individual.net cBKfq/C0HRaAu0n0iMYWFAuwmafV9d4bQGLd3fmvCLv/D9d/8t
Cancel-Lock: sha1:FzaZCD5mGesiU1ACZn0t+W1aZAE= sha256:1PfB9LFdunXpaltl0z0pNAgv7dQOYYbmwzHx01Y3lXE=
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101
Thunderbird/68.12.1 Hamster/2.1.0.1538
In-Reply-To: <u81br7$4ghs$1@dont-email.me>
View all headers

Am 04.07.2023 um 16:54 schrieb wolfgang bauer (D):
> 04.07.23 , 15:07 , Thomas Koenig:
>> Aber willst du tatsächlich, das das Programm nur interaktiv
>> funktioniert und z.B. nicht aus einer Datei oder von einer Pipe
>> gefüttert werden kann? Hat dein Anwendungsfall Besonderheiten,
>> die nur interaktive Ausführung interessant machen?
>
> Ja. Das ist hier Absicht. Das Programm holt sich zwar Daten aus Dateien,
> aber es gehört hier zum Bedienkonzept, das es dann per Konsole gesteuert wird.

Die Konsole kann auch abhandenkommen, z.B. /dev/ttyUSB0, wenn das
USB-Gerät abgezogen wird.

Für ein Wegwerf-Programm mag ein einmaliger Test im Voraus ausreichend
sein. Aber ansonsten kostet so ein Test wirklich nicht viel.

Das ist das gleiche Niveau wie Testen des Rückgabewertes von malloc. In
Wegwerfprogrammen mag es ok sein, das zu ignorieren, aber eigentlich
sollte man sich das von vornherein angewöhnen. Nichts hält länger als
ein Provisorium.

(Mein "mal eben eine serielle Schnittstelle und ein Rich-Text-Widget
zusammengeknotet" Programm von 2005 ist immer noch im Produktiveinsatz.)

Stefan

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Peter J. Holzer
Newsgroups: de.comp.lang.c
Organization: LUGA
Date: Tue, 4 Jul 2023 16:17 UTC
References: 1 2 3
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsfeed.xs3.de!callisto.xs3.de!tahina.priv.at!news.luga.at!.POSTED.83.218.180.76!not-for-mail
From: hjp-usen...@hjp.at (Peter J. Holzer)
Newsgroups: de.comp.lang.c
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Tue, 4 Jul 2023 18:17:58 +0200
Organization: LUGA
Message-ID: <slrnua8hhm.1lu6.hjp-usenet3@trintignant.hjp.at>
References: <u80t6f$2ufe$1@dont-email.me>
<u815j2$46cs$1@newsreader4.netcologne.de> <u81br7$4ghs$1@dont-email.me>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Content-Transfer-Encoding: 8bit
Injection-Info: vinge.luga.at; posting-host="83.218.180.76";
logging-data="6570"; mail-complaints-to="usenet@vinge.luga.at"
User-Agent: slrn/1.0.3 (Linux)
View all headers

On 2023-07-04 14:54, wolfgang bauer (D) <schutz@gmx.de> wrote:
> 04.07.23 , 15:07 , Thomas Koenig:
>> Aber willst du tatsächlich, das das Programm nur interaktiv
>> funktioniert und z.B. nicht aus einer Datei oder von einer Pipe
>> gefüttert werden kann? Hat dein Anwendungsfall Besonderheiten,
>> die nur interaktive Ausführung interessant machen?
>
> Ja. Das ist hier Absicht. Das Programm holt sich zwar Daten aus
> Dateien, aber es gehört hier zum Bedienkonzept, das es dann per
> Konsole gesteuert wird.

In diesem Fall sollte EOF allerdings als Kommando zum Beenden des
Programms interpretiert werden.

hp

Subject: Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
From: Thomas Koenig
Newsgroups: de.comp.lang.c
Organization: news.netcologne.de
Date: Tue, 4 Jul 2023 16:30 UTC
References: 1 2 3 4
Path: i2pn2.org!i2pn.org!weretis.net!feeder8.news.weretis.net!newsreader4.netcologne.de!news.netcologne.de!.POSTED.2001-4dd4-c42d-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de!not-for-mail
From: tkoe...@netcologne.de (Thomas Koenig)
Newsgroups: de.comp.lang.c
Subject: Re: Linux: Test, ob Programm über Terminal
gestartet wurde. Wie ?
Date: Tue, 4 Jul 2023 16:30:49 -0000 (UTC)
Organization: news.netcologne.de
Distribution: world
Message-ID: <u81hfp$4fnd$1@newsreader4.netcologne.de>
References: <u80t6f$2ufe$1@dont-email.me>
<u815j2$46cs$1@newsreader4.netcologne.de> <u81br7$4ghs$1@dont-email.me>
<u81mvq.104.1@stefan.msgid.phost.de>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Injection-Date: Tue, 4 Jul 2023 16:30:49 -0000 (UTC)
Injection-Info: newsreader4.netcologne.de; posting-host="2001-4dd4-c42d-0-7285-c2ff-fe6c-992d.ipv6dyn.netcologne.de:2001:4dd4:c42d:0:7285:c2ff:fe6c:992d";
logging-data="147181"; mail-complaints-to="abuse@netcologne.de"
User-Agent: slrn/1.0.3 (Linux)
View all headers

Stefan Reuther <stefan.news@arcor.de> schrieb:

> Das ist das gleiche Niveau wie Testen des Rückgabewertes von malloc. In
> Wegwerfprogrammen mag es ok sein, das zu ignorieren, aber eigentlich
> sollte man sich das von vornherein angewöhnen. Nichts hält länger als
> ein Provisorium.

In diesem Zusammenhang:

https://xkcd.com/2730/


rocksolid / de.comp.lang.c / Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?

1
server_pubkey.txt

rocksolid light 0.9.12
clearnet tor