Daten|teiler
Kopieren als Kulturtechnik

Update: Meine IP-Adresse mit C/C++

14. März 2009 von Christian Imhorst

Laut dem WhatIsMyIP-Forum ist es sehr schwierig, seine eigene externe IP-Adresse mit einem C++-Programm herauszufinden. Dazu brauche man wenigstens 30 Zeilen Quellcode für den Socket, die Verbindung zum Server, die HTTP-Anfrage, das Abwarten der Antwort und so fort. Da ich das gerne glaube habe ich nicht wie in Perl oder Python ein eigenes kleines Programm bzw. eine eigene Funktion geschrieben, sonder auf die Funktion system() von C++ zurückgegriffen.

Mit system() kann man innerhalb eines C++-Programms ein anderes Programm ausführen. Hier zum Beispiel das Programm Curl, das bei den meisten Linux-Distributionen noch zusätzlich installiert werden muss. Bei Mac OS X ist es standardmäßig dabei. Hat man Curl installiert, kann man mit folgendem Programm seine externe IP-Adresse auf der Konsole anzeigen lassen:

#include <iostream>
#include <cstdlib>
 
using namespace std;
 
int main (void)
{
   if(system("curl 'http://whatismyip.com/automation/n09230945NL.asp'")==-1)
     cout << "Error executing Command"<<endl;
 
   return  EXIT_SUCCESS;
}

Update:
Für die Programmiersprache C gibt es die Bibliothek libcurl. Um sie zu nutzen habe ich die Version curl-7.19.4 heruntergeladen und mit dem berühmten Dreisatz ./configure && make && sudo make install kompiliert. Alternativ kann man auch das Paket libcurl3-dev aus dem Repository seiner Distribution installieren: mit Apt geht das durch dir Eingabe von apt-get install libcurl3-dev im Terminal. Danach habe ich mir folgendes kleines Beispiel „zusammenkopiert“:

/* myIP.c */
#include <stdio.h>
#include <curl/curl.h>
#include <string.h>
 
int main(void) {
   CURL *curl;
   CURLcode res;
   char whatismyip[50];
   strcpy(whatismyip, "whatismyip.com/automation/n09230945NL.asp");
 
   curl = curl_easy_init();
   if(curl) {
     curl_easy_setopt(curl, CURLOPT_URL, whatismyip);
     res = curl_easy_perform(curl);
 
     /* always cleanup */
     curl_easy_cleanup(curl);
   }
   return 0;
}

Beim Kompilieren des Beispiels muss man noch das Attribut -lcurl anhängen, um die Fehlermeldungen

/tmp/ccufDDUa.o: In function `main':
simple.c:(.text+0x8a): undefined reference to `curl_easy_init'
simple.c:(.text+0xb4): undefined reference to `curl_easy_setopt'
simple.c:(.text+0xbf): undefined reference to `curl_easy_perform'
simple.c:(.text+0xcd): undefined reference to `curl_easy_cleanup'
collect2: ld gab 1 als Ende-Status zurück

zu vermeiden. Eine weitere Fehlermeldung könnte die folgende sein:

/tmp/cc43idA6.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0'
collect2: ld gab 1 als Ende-Status zurück

Hier teilt der Linker mit, dass er zum Kompilieren noch die Option -lstdc++ benötigt. Weitere Optionen für den Linker liefert das Kommando curl-config --libs:

gcc -o myIP myIP.cpp -lcurl -lstdc++

Wenn alles fehlerfrei funktioniert hat, gibt der Befehl ./myIP im Terminal die eigene IP-Adresse zurück. Quellcode und Progamm kann man hier herunterladen.

Geschrieben in Programmieren | Kommentare deaktiviert für Update: Meine IP-Adresse mit C/C++

Ausgebrochen — Das iPhone nach dem Jailbreak

9. März 2009 von Christian Imhorst

Erst der Jailbreak macht das Herz des Unix-Users froh. — Zen-Spruch

Nachdem man Apples Handy von seinen lästigen Beschränkungen befreit hat, kann man endlich damit Anfangen, die ganze phantastische Open Source Software zu benutzen. Dabei hilft das Programm Cydia von Jay „saurik“ Freeman, das ähnlich wie der App Store funktioniert, aber vor allem Freie und Open Source Software anbietet, wie die Gnu-Tools, Bash und GCC, aber auch einen Terminal-Emulator, Scriptsprachen von Python über Java bis Ruby und, wer es braucht, etliche Klingeltöne und Themes. Das ist aber nur ein kleiner Ausschnitt aus dem riesigen Repository.

Den restlichen Eintrag lesen »

Geschrieben in MacOS X und iPhone | Kommentare deaktiviert für Ausgebrochen — Das iPhone nach dem Jailbreak

Eine kleine Einführung in KDevelop

6. März 2009 von Christian Imhorst

Dieser Artikel von mir ist erstmals im freiesMagazin Februar 2009 erschienen.

Die Besonderheit von der integrierten Entwicklungsumgebung (IDE) KDevelop liegt darin, dass man ziemlich einfach ein ganzes Softwareprojekt erstellen kann. Dabei nimmt es einem die Erstellung und Verwaltung aller benötigten Projektdateien wie Quelltext, Configure-Skript, Makefile, Lizenz und Dokumentation ab. Wenn das Projekt fertig ist, kann es als Tar-Archiv gepackt und veröffentlicht werden. Jeder, der mal den Quelltext eines Open-Source-Projekts heruntergeladen hat, um ihn anschließend zu kompilieren, kennt solche Archive – und mit KDevelop hat man sie schnell gebaut.

Den restlichen Eintrag lesen »

Geschrieben in freiesMagazin | Kommentare deaktiviert für Eine kleine Einführung in KDevelop

freiesMagazin 03/2009 erschienen

1. März 2009 von Christian Imhorst

Heute ist die Märzausgabe von freiesMagazin erschienen. Falls man hinter einer Firewall sitzt, die FTP nicht zulässt, ist das Magazin auch per HTTP-Zugriff auf das FTP-Verzeichnis zu erreichen.

Auch diesen Monat gibt es wieder eine HTML-Ausgabe für Mobilgeräte ohne Bilder und mit Bildern (ca. 3,5 MB). Unter der Adresse http://freiesmagazin.de/mobil/ findet man immer die aktuelle und alle bisher erschienenen Mobil-Ausgaben.

Inhalte der Ausgabe 03/2009 sind u.a.

  • openSUSE 11.1
  • LXDE im Test
  • Der Logical Volume Manager
  • Januar und Februar im Kernelrückblick
  • OS-Tan-Linux-Desktophintergründe
  • World of Goo – Die Bälle sind los
  • Kurztipp: Songbird installieren
  • Kurztipp: Bastelstunde mit Pdftk
  • Review: Motorola ROKR E8

Zusätzlich findet sich die ausführliche Auswertung der Umfrage im Magazin und es werden immer noch Mitarbeiter gesucht.

Das vollständige Inhaltsverzeichnis findet man auf der Webseite der aktuellen Ausgabe. Leserbriefe mit Lob, Kritik, Anregungen oder Fragen können an die Redaktion geschickt werden.

Wer jeden Monat an die neue Ausgabe erinnert werden will, kann auch den RSS-Feed abonnieren. Auf der Magazin-Seite können die letzten drei Ausgaben von freiesMagazin abgerufen werden, ältere Ausgaben findet man im Archiv.

Geschrieben in freiesMagazin | Kommentare deaktiviert für freiesMagazin 03/2009 erschienen

Ganz nett, aber mit vielen Schwächen — das iPhone 3G

27. Februar 2009 von Christian Imhorst

In einem Anfall von weiß ich nicht mehr warum habe ich mir von T-Mobile ein iPhone 3G als neues Handy schicken lassen. Preislich und vom Vertrag her gesehen kam es von den Handys, die mich interessiert haben, doch noch am günstigsten. Dabei war mir im Prinzip schon klar, dass ich als Linux-User schnell an die Grenzen des kleinen Smartphones stoßen werde. Das beginnt schon mit der Aktivierung; Dazu braucht man unbedingt iTunes, weil das iPhone komplett mit diesem Programm verheiratet ist.

Den restlichen Eintrag lesen »

Geschrieben in MacOS X und iPhone | Kommentare deaktiviert für Ganz nett, aber mit vielen Schwächen — das iPhone 3G

Die Funktion istZahl in C++

16. Februar 2009 von Christian Imhorst

Für ein kleines Programmierprojekt muss ich in C++ eine Eingabe überprüfen, ob wirklich nur ganze Zahlen, oder etwa andere Zeichen eingegeben wurden. Ich dachte da an dieses kleine Stück Quellcode:

#include <iostream>
using namespace std;
 
int main(){
 
        int zahl = 0;
        char zeichen[20];
        cout<<"Bitte Zahl eingeben: ";
        cin>>zeichen;
 
        while (!(sscanf(zeichen, "%d", &zahl))) {
        	cout<<"\nUngültige Eingabe. \nBitte nur Zahlen eingeben: ";
        	cin>>zeichen;
		}
            cout<<zahl<< " ist eine Zahl"<<endl;
 
}

Nur leider zeigt dieser Code-Schnipsel bei größeren ganzen Zahlen nur noch die Zahl 2147483647 an, was genau dem obersten Wertebereich des Datentyps int entspricht. Eine Zahl die größer ist, kann das Programm nicht anzeigen:

<em>Diese Zahl kommt einem bekannt vor...</em>

Diese Zahl kommt einem bekannt vor...

Da ich aber mit Eingaben rechnen muss, die mehr als zehn Stellen haben können, hilft mir dieses Code-Beispiel nicht weiter. Daher habe ich eine eigene Funktion istZahl() geschrieben:

#include <iostream>
#include <cstring>
using namespace std;
 
int istZahl(char zahl[10]){
	int laenge=strlen(zahl);
	for(int i=0; i<laenge; i++)
        if ( !((int)zahl[i] > 47 && zahl[i] < 58)){
		return false;
		}
	return true;
	}
 
int main(){
	char a[20];
	cout<<"Bitte eine Zahl eingeben: ";
	cin.getline(a,20);
 
	while (istZahl(a)==false){
	cout<<"\nUngültige Eingabe. \nBitte nur Zahlen eingeben: ";
	cin.getline(a,20);
}
	cout<<a<<" ist eine Zahl."<<endl;
 
	return 0;
 
}

Hier kann eine ganze Zahl mit bis zu 19 Stellen eingegeben werden, da die 20. Stelle für die Endekennung \0 benötigt wird. Alle Stellen, die darüber hinausgehen, werden einfach abgeschnitten. Sollte das nicht reichen, kann man den Wert im Quellcode noch erhöhen.

So würde ich es machen, aber vielleicht gibt es ja noch schönere Lösungen?

[Update] Wie man an den Kommentaren vielleicht schon sieht, geht die Funktion noch schöner und hat Dank Stefan den neuen Namen istZiffer():

#include <iostream>
#include <cstring>
using namespace std;
const int MAX=5;
 
bool istZiffer(char ziffer[MAX]){
	int laenge=strlen(ziffer);
	for(int i=0; i<laenge; i++)
        if (!(ziffer[i] >= '0' && ziffer[i] <= '9')) 
        // if (! isdigit (ziffer[i]))
        {
		return false;
		}
	return true;
	}
 
int main(){
	char a[MAX];
 
	do 
	{
		cout<<"Bitte Ziffern eingeben: ";
		cin.getline(a,MAX);
 
    }while (istZiffer(a)==false);
 
	cout<<a<<" ist eine Zahl."<<endl;
 
	return 0;
 
}

Das funktioniert soweit ganz gut, bis auf ein oder zwei Schönheitsfehler:

  1. Wenn ich im obigen Beispiel istZiffer() mehr als 4 Ziffern eingebe, wird alles was danach kommt einfach abgeschnitten, was aber für meine Bedürfnisse nicht weiter schlimm ist.
  2. Gebe ich aber z.B. mehr als vier Buchstaben ein, habe ich einen nervigen Programmabbruch, den ich noch nicht ganz weg bekomme.
  3. Wie dee schon sagt: Die Enter-Taste wird von der Funktion wie eine Ziffer behandelt, was ich auch noch ändern muss.

Aber Dank der vielen guten Kommentare ist die Funktion schon viel besser geworden. ;-)

Geschrieben in Programmieren | Kommentare deaktiviert für Die Funktion istZahl in C++

freiesMagazin 02/2009 erschienen

1. Februar 2009 von Christian Imhorst

Heute ist die Februarausgabe von freiesMagazin als KDE-Sonderausgabe erschienen. Falls man hinter einer Firewall sitzt, die FTP nicht zulässt, ist das Magazin auch per HTTP-Zugriff auf das FTP-Verzeichnis zu erreichen.

Auch diesen Monat gibt es wieder eine HTML-Ausgabe für Mobilgeräte ohne Bilder und mit Bildern (ca. 2,1 MB). Unter der Adresse http://freiesmagazin.de/mobil/ findet man immer die aktuelle und alle bisher erschienenen Mobil-Ausgaben.

Inhalte der Ausgabe 02/2009 sind u.a.

  • KDE4 wird erwachsen
  • KWin 4.2 – Neues aus dem Land der wabernden Fenster
  • Der KDE-Dateimanager Dolphin
  • Amarok 2: Der Wolf setzt zum Sprung an
  • Eine kleine Einführung in KDevelop
  • Scannen mit Skanlite
  • Die digitale Brieftasche: KWallet

Das vollständige Inhaltsverzeichnis findet man auf der Webseite der aktuellen Ausgabe. Leserbriefe mit Lob, Kritik, Anregungen oder Fragen können an die Redaktion geschickt werden.

Von mir ist übrigens der Artikel „Eine kleine Einführung in KDevelop“. Ich wünsche viel Spaß beim Lesen.

Geschrieben in freiesMagazin | Kommentare deaktiviert für freiesMagazin 02/2009 erschienen

Suspend-Ärger nach Kernel-Update

29. Januar 2009 von Christian Imhorst

Nachdem heute die neue Kernel-Version 2.6.27-11-generic über das automatische Update bei Ubuntu 8.10 aufgespielt wurde, klappt der Suspend bei meinem Acer Aspire 2920 nicht mehr. Die Bereitschaft verhält sich wieder genauso, wie unter Ubuntu 8.04 „Hardy Heron“. Das Notebook legt sich zwar schlafen, wacht aber nicht mehr auf. Stattdessen stürzt es ab und muss nochmal komplett neu gestartet werden. Das hat mit Intrepid Ibex auch schon besser funktioniert.

Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux | Kommentare deaktiviert für Suspend-Ärger nach Kernel-Update

Wie installiere ich MonoDevelop?

27. Januar 2009 von Christian Imhorst

Keith Curtis hat in seinem Buch After The Software Wars ganz begeistert über C# berichtet, weshalb ich die Sprache unter Ubuntu 8.10 unbedingt einmal ausprobieren möchte. Da eine C#-Unterstützung erst für KDevelop 4 Zeit noch geplant ist, habe ich Mono und MonoDevelop installiert.

Den restlichen Eintrag lesen »

Geschrieben in Gnu/Linux, Programmieren | Kommentare deaktiviert für Wie installiere ich MonoDevelop?

freiesMagazin 01/2009 erschienen

4. Januar 2009 von Christian Imhorst

Heute ist die Januarausgabe von freiesMagazin erschienen. Falls man hinter einer Firewall sitzt, die FTP nicht zulässt, ist das Magazin auch per HTTP-Zugriff auf das FTP-Verzeichnis zu erreichen.

Auch diesen Monat gibt es wieder eine HTML-Ausgabe für Mobilgeräte ohne Bilder und mit Bildern (ca. 2,3 MB). Unter der Adresse http://freiesmagazin.de/mobil/ findet man immer die aktuelle und alle bisher erschienenen Mobil-Ausgaben.

Inhalte der Ausgabe 01/2009 sind u.a.

  • Installation und Einrichtung von Avant Window Navigator
  • Projektvorstellung Opera
  • Das neue „Sonnensystem“ – Ein Blick auf OpenSolaris 2008.11
  • Ubuntu 8.10 – Die neue Version „Intrepid Ibex“ vorgestellt
  • Die zehnte Fedora-Ausgabe vorgestellt

Zusätzlich hat freiesMagazin auch eine Umfrage gestartet und bittet alle Leser daran teilzunehmen.

Geschrieben in freiesMagazin | Kommentare deaktiviert für freiesMagazin 01/2009 erschienen

« Previous Entries Next Entries »