Frage von DAUUSER, 34

Umlenkung in C Programmen?

Hallo, wie kann man in der Programmsprache C eine Umlenkung mit Unix/Linux-Befehlen realisieren ?

Also man hat eine Datei (z.b .txt) mit Namen bzw. Wörter mit dem Vorzeichen:

(+) für Hinzufügen;

(-) für Entfernen

Und es sollen die im Terminal einlesen Namen/Wörter im C- Programm weiterverarbeitet werden.

Ich weiß zwar wie man mit Umleitungen in Ubuntu umgeht, aber nicht wie man sowas in einem C-Programm umsetzt.

Über konstruktive Hilfe wäre ich sehr dankbar :-)

Antwort
von tgel79, 28

Tut mir leid,

  • ich habe deine Frage gelesen,
  • ich verstehe nicht, was du willst und
  • ich bin sicher, es liegt nicht an mir sondern an deiner Fragestellung

Präzisier doch nochmal, z.B. anhand eines Beispiels genau was du möchtest. Welches Verhalten soll dein Programm haben?

Kommentar von DAUUSER ,

Ich habe ein C-Programm mit dem man alphabetisch Strings sortieren [Stacks nach dem LIFO- Prinzip] kann und möchte z.b mit einer .txt oder alternativ mit .dat , Strings einlesen(+) bzw. entferen(-).

In der der Datei steht

+ Name1   
- Name2

Aber dies möchte ich mit dem Terminal in Ubuntu einlesen können (Umleitung der Eingabe mit <)

Kommentar von tgel79 ,

schon besser.

Du möchtest eine Datei öffnen, auslesen und wieder schließen.

#include <stdio.h>
int main(int argc, char **argv) {
  FILE f1 = fopen( argv[1] );
  ...
  fclose(f1);
}

Du kannst im Grunde mit dem Stream wie für das Terminal arbeiten. Aus scanf wird z.B. fscanf usw. Nur dass du jetzt immer den stream f1 mit übergeben mußt.


 

Antwort
von GWBln, 5

Umlenkung brauchst du im Grunde genommen nicht, wenn du realisierst, daß die Standard-Kanäle Eingabe, Ausgabe, (Fehler-)Meldungen Ziffern zugeordnet sind ... m.W. 0, 1, 2 (in obiger Reihenfolge) ... aber das ist auch nicht wichtig, da diese Deklarationen Standard sind:

  • Read ... liest von der Konsole
  • Write ... schreibt auf den Bildschirm
  • Meldungen (im Normalfall ebenfalls auf die Konsole)

Wenn du die Datei - die gelesen werden soll - als 1. Parameter angibst, sollte die dem Eingabe-Kanal zugeordnet werden ...

Wenn das nicht automatisch passiert, solltest du so vorgehen, wie "tgel79" geschrieben hat ...
mit der Ergänzung, daß die Reihenfolge der Parameter (beim Aufruf) mit der Formulierung

argv[2]

mit dem 2. Parameter korrespondiert.

Aber wie gesagt, Umleitungen sind da nicht zwingend!

Wenn du mehr darüber wissen willst, probiere mal

sort < EingabeDatei >AusgabeDatei

Wenn du - im obigen Beispiel - das Ende, also den 2. Parameter weg läßt, erscheint die sortierte Liste auf dem Bildschirm.

Das Programm "sort" ist ja OpenSoftware ... also kannst du dir die Quelle dazu ansehen!

Deine Programme kannst du dann analog aufbauen ... oder eine Kopie von "sort" mit anderer Verarbeitung ... warum das Rad immer wieder neu erfinden?

Antwort
von 3v1lH4x0R, 11

Oder aber:
Du übergibst den Dateinamen als Parameter ab das Programm:
deinProgramm birnen.txt
Im Code so auszulesen:
int main(int argc, char *argv[]){
printf("%s", argv[1]);
}

Tutorials zum File IO mit C gibt es hier: http://www.tutorialspoint.com/cprogramming/c_file_io.htm
Im Grunde kannst du mit fopen einen Stream öffnen und den dann mehr oder weniger wie den normalen Output lesen und schreiben.

Antwort
von 3v1lH4x0R, 20

Vielleicht könnte dich die Pipe interressieren.
Die Pipe (|) leitet die Standartausgabe des Proramms links von ihr in die Standarteingabe von dem auf der rechten Seite.
Beispiel:
cat apfel.txt | less
Dies gibt die Ausgabe von cat apfel.txt (den Inhalt der Datei) an less weiter. Less zeigt die Datei nun an und ermöglicht es in ihr Sachen zu suchen etc..

Bei Fragen fragen.

Kommentar von DAUUSER ,

Danke für die Hilfe, aber wie schon geschrieben würde ich gerne wissen wie man in einem C-Programm es so realisiert kann, das eine .txt von außen (Terminal bzw. Windows Shell) in das C-Programm einlesen kann.

Expertenantwort
von guenterhalt, Community-Experte für Linux, 10

du kannst natürlich mit

system( "Linux-Befehle" );

solche Befehle auch in C verwenden. Das sollte aber die letzte Möglichkeit sein.

Eleganter ist es aber wirklich die Elemente von C
fopen, fread, fseek, getline, fwrite , fclose ....
zu benutzen.

Hier den C-Code als Antwort zu schreiben, ist wohl doch etwas zu viel.
Schließlich müssen auch Fehleingaben, Dateifehler und viele andere  Dinge behandelt werden. Da kommen schnell mehrere 100 Zeilen zusammen.

Eigentlich hilft da nur C lernen.

Kommentar von DAUUSER ,

Da bin ich ja gerade dabei (also C zu lernen) ich will nicht das mir jemand alles vorkaut, aber irgendwie hänge ich an dem Problem fest.

Antwort
von 3v1lH4x0R, 11

Okay ich mach es spezifischer: cat datei.txt | deinC-Programm

Kommentar von 3v1lH4x0R ,

Dann im Programm einfach normal Input auslesen wie vom Nutzer.

Keine passende Antwort gefunden?

Fragen Sie die Community