Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > de.comp.lang.c > #10555

Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?

From Thomas Koenig <tkoenig@netcologne.de>
Newsgroups de.comp.lang.c
Subject Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ?
Date 2023-07-04 13:07 +0000
Organization news.netcologne.de
Message-ID <u815j2$46cs$1@newsreader4.netcologne.de> (permalink)
References <u80t6f$2ufe$1@dont-email.me>

Show all headers | View raw


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?

Back to de.comp.lang.c | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? "wolfgang bauer (D)" <schutz@gmx.de> - 2023-07-04 12:44 +0200
  Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? Markus Schaaf <mschaaf@elaboris.de> - 2023-07-04 13:48 +0200
  Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? Thomas Koenig <tkoenig@netcologne.de> - 2023-07-04 13:07 +0000
    Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? "wolfgang bauer (D)" <schutz@gmx.de> - 2023-07-04 16:54 +0200
      Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? Stefan Reuther <stefan.news@arcor.de> - 2023-07-04 18:04 +0200
        Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? Thomas Koenig <tkoenig@netcologne.de> - 2023-07-04 16:30 +0000
      Re: Linux: Test, ob Programm über Terminal gestartet wurde. Wie ? "Peter J. Holzer" <hjp-usenet3@hjp.at> - 2023-07-04 18:17 +0200

csiph-web