C++: stream

– alle Daten werden zu chars
– In:
bedeutet von aussen zur CPU.
– out:
bedeutet von OS nach aussen
————————————————————————————-

istream

char Daten werden übergeben

ostream
sendet chars an eine Ort (file, konsole, speicher, ..)

ifstream  [Daten in File ablegen]
– Datei als String mitgeben
ifstream stream_a {„input.txt“}
– Inhalt wortweise in String ablegen string temp
– Strings in Vektor speichern   vector <string> input

while (stream_a >> temp) {      
        // fill vector
        input.push_back(temp);
    }


ofstream
[ lesen von einem file (wird als stream gemacht)]

cout << "Name of output file"
string name_outputfile;
cin >> name_outputfile;

ostream stream_1 {name_outputfile};
if (! stream_1) error("Konnte nicht eingelesen werden.");

 

strukturiert einlesen

struct Inputdata {
    int hour;
    double temperature; 
};
cout << "Please enter input file name: ";
    string name_inputfile;
    cin >> name_inputfile;
    ifstream ist {name_inputfile};
    if (!ist) throw ios_base::failure("can't open input file "+name_inputfile);
vector<Inputdata> temps; // structured vector
    int hour;
    double temperature;

    // read structured in
    while (ist >> hour >> temperature) {
        if (hour < 0 || 23 <hour) throw range_error("hour out of range");
        // fill vector
        temps.push_back(Inputdata{hour,temperature});
    }

 

strucktruriert ausgeben

// set brackets for clearer structure
    for (int i=0; i<input.size(); ++i)
        ost << '(' << input[i].hour << ','
            << input[i].temperature << ")\n";

 

 

 

 

Datendurchsatz R per LAN messen [Bitpersecond]

Iperf
Ist ein freie Software, um den Datendurchsatz auf TCP/IP-Netzen zu messen. Das Programm generiert UDP oder TCP Datenströme und funktioniert nach dem Server-Client-Prinzip.

# Client
iperf3 -c <ip-server>
# Client mit Paketgrösse und Meesszeit 1 min
iperf3 -c <ipserver> -l 1400 -t 60 
-f k 
--get-server-output
# Server 
iperf3 -s

Befehle
– l     :  Packetgrösse
– t    :   Wie lange (in s). Standard: 10 s.
– i    :   Intervall der Pakete (in s). Standard: 1 s.
— get-server-output : Die Messwerte des Serverers
.          erscheinen auch unter den Messwerten des
.          Clients. So in 1 Datei beide Werte.
– f    :   Ausgabeformat der Messung.
.          -f k   bedeutet, dass alle angaben in k sind
-B   :   welche IP (bei mehreren Netzen, z.B. LAN und WLAN)
– u    :  UDP.  Standard: TCP.

Eingabe Parameter über Konsole (Windows)

# Messinterval und Messzeit eingeben
echo %1 %2
iperf3 -c -i %1 -t %2

Eingabe Paramter über Konsole (Linux)

echo "Messintervall: " $1
echo "Messdauer: "     $2
iperf -c -i $1 -t $2

 

Theoretische Durchsatzraten WLAN

 

 

c++: Ausgabe Konsole: cout <<

Allgemein cout und cin
– Aufgrund von Operator Overloading kann cout  alle Datentypen ausgeben
Standardformat für Zahlen ist hex
#include <iostream> ist notwendig
– Die Eingabe über Konsole wird wortweise  in cin gespeichert.
– Gibt man mehrere Wörter (mit Leerschlag getrennt) ein, so wird
.  wenn cin nur 1 Varibale folgt, nur das erste Wort übernommen. Ansonsten
.  braucht es nach cin mehrere Variablen.
Wert = 0 wird nicht ausgegeben. Es erscheint ein Loch.
Es scheint, wie wenn kein Wert da ist.

Ausgabe dezimal

std::cout << std::dec << (int) var_1 << std::endl;
std::cout << std::dec << (int) treeMemy[0] << std::endl;


Ausgabe bitwise
Es braucht zwei Schritte. Typcast vor dem Output direkt funktioniert nicht.

char var_1 = 5;
std::bitset<8> bits(var_1);   /funktion vor output
std::cout << bits << std::endl;

– bitset muss als Library eingefügt werden
#indlucde <bitset >

Ausgabe char
– Char-Werte werden teilweise wie die 0-Werte nur mit einem Loch ausgegeben. Die Konversion zum Datentyp short hilft, dass man die Werte auf der Konsole sieht.

std::cout << (short) bitReadOut << std::endl;

Führende Nullen anzeigen

std::cout << setfill('0') << setw(5) << var_2<< std::endl;

-setw() sagt, wie viele Stellen man insgesamt ausdruckt

.

 

 

stream bearbeiten

token
Aufteilen des Streams in Pakete.
Die Paketunterteilung erfolgt über intelligente Funktionen.
Die Token an sich haben noch keine Bedeutung, es sind uninterpretierte Pakete.

parsen
Nennt man den Vorgang, der den Paketen (Token) eine Bedeutung zuteilt.
Es ist die Interpretation der Pakete.


Mit den Pipe-Operatoren < und > können streams übergeben werden.
Dies kann als Parameter für ein anderes Programm oder in eine Datei sein.

Pipe

Eine Pipe ist ein Datenstrom zwischen zwei Prozessen.
Bzw. es ist der Ausgang der Daten des ersten Programmes, der Abgefangen wird.

programm1 >> daten >> programm2
programm1 | ausgabe.txt // Die daten werden in ausgabe.txt geschrieben

Das Ergebnis eines Programms wird als Eingabe eines anderen Programms verwendet

| <optionen
Programm 1 übergibt Datenstrom direkt Programm 2