Seite 1 von 1

Verfasst: 18.11.2004, 10:00
von ap0calypse
morgen,

Meine Frage wird einigen hier wahrscheinlich sehr trivial vorkommen, aber wie bekomme ich mit einer Funktion die lokale IP-Adresse heraus? Habe mir schon einige man-pages angesehen, aber noch nichts gefunden, was meinen Wünschen entspricht. Ich suche quasi eine getlocaladdr()-Funktion. Kann mir jemand sagen ob es so etwas gibt ( wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht :rolleyes: ).

Und zweiteres: Ich bräuchte ein "Timer"-Element. In anderen Compilern die ich hatte, hatte ich die Funktion wait(), die finde ich aber hier nicht. Ich will einfach eine Funktion die ein paar Sekunden den Lauf anhält, so dass danach wieder alles normal weiterläuft.

Ich weiß, meine Fragen werden euch einfach erscheinen, aber könntet ihr euch trotzdem erbarmen? Ich bin auch mit Verweisen auf man-page Einträge zufrieden, solange sie mir helfen.

Danke schon mal im Voraus!

EDIT: hmmm inet_lnaof() schaut gut aus...
EDIT2: Ok ich habs geschafft .... :rolleyes:

Ausser das mit dem Timer ...

EDIT3:

Ok ich habe jetzt auf redhat, suse und slackware eine möglichkeit gefunden über die bash.

falls es wen interessiert:

grep $(hostname) /etc/hosts | cut -f 1

Das hol ich mir einfach, ist weniger komplex ;)

EDIT4: EDIT3 ist Schwachfug, funktioniert nicht wenn Clients die IP via DHCP bekommen :/ dann halt doch wieder zu C und zu gethostname() und gethostbyname() und inet_addr() ... :/

Verfasst: 18.11.2004, 11:33
von Mithrandir
Zu 2. könntest du dir mal http://www.delorie.com/gnu/docs/glibc/libc_445.html zu Gemüte führen. Ist in der glibc drin:

#include <unistd.h>
unsigned int sleep (unsigned int seconds)
The function sleep gives a simple way to make the program wait for a short interval. If your program doesn't use signals (except to terminate), then you can expect sleep to wait reliably throughout the specified interval. Otherwise, sleep can return sooner if a signal arrives; if you want to wait for a given interval regardless of signals, use select (see section 13.8 Waiting for Input or Output) and don't specify any descriptors to wait for.

Verfasst: 18.11.2004, 12:50
von ap0calypse
Danke schon mal :)

Kann sleep() auch andere Werte als Sekunden haben? Weil eine Sekunde ist schon ziemlich lang ...

Offenbar nicht. unsigned int ... :/

Habe auf der Seite schon die Funktion nanosleep gefunden, die kleinere Werte übergeben bekommen kann.

Danke nochmal.

Bleibt nur noch das Problem mit der IP. Gibt es wirklich keine einfach Möglichkeit die IP eines Rechners herauszufinden? Ick kann mich noch an meine VisualBasic Zeit unter Windows erinnern, da war das ein Befehl. Kann ja nicht sein, dass das so schwer ist....

Verfasst: 18.11.2004, 15:42
von Roughael
ähm wollt nur sagen, dass Sleep milliseconds annimmt und nicht seconds.

wegn topic:
http://www.codeproject.com/internet/getipnr.asp
Have Fun!
Bandit.

Verfasst: 18.11.2004, 16:56
von ap0calypse
Ich dachte meine Signatur mit Slackware-Linux und meine wüsten Verunstaltungen mit /etc/hosts usw, wären auffällig genug gewesen, um zu merken, dass ich NICHT auf/für Windows programmiere.

Insofern kann ich mit deinem oberen Beispiel nichts anfangen. Mich hat schon das .asp im Link stutzig gemacht ( *würg* ).

Wenn ich mich jetzt total irre, bitte berichtigt mich, aber den Code-Schnipsel aus dem Beispiel kann ich leider nicht gebrauchen.

Danke trotzdem für die Mühe.

Verfasst: 18.11.2004, 18:26
von Roughael
uh sry.. habich wohl nich bemerkt ..
das mitm sleep trifft aber trotzdem zu.
Have Fun!
Bandit.

Verfasst: 18.11.2004, 18:55
von Roughael
ah vieleicht hilft dir das weiter:
http://msdn.microsoft.com/library/defau ... name_2.asp
jaja ich weis ne .asp seite :p
naja ist winsock, und winsock soll ja angeblich leicht auf linux portierbar sein.
die funktion gibt nen pointer auf ne structur zurück, welche nen item h_addr_list[] hat (nen array von in_addr)
schätze mal das enthält alle addressen die der host hat.
falls du das dann als string brauchst sollteste das mit inet_ntoa umkonvertieren können.

edit: au shit hab grad erst gesehn du hast ja dein post editiert und weis das schon :\

Have Fun!
Bandit.

Verfasst: 18.11.2004, 19:28
von tilman
Original erstellt von TTK-Bandit
das mitm sleep trifft aber trotzdem zu.
Nö:

NAME
sleep - Sleep for the specified number of seconds

SYNOPSIS
#include <unistd.h>

unsigned int sleep(unsigned int seconds);

[...]

Nimm usleep() oder nanosleep().

Verfasst: 18.11.2004, 22:13
von ap0calypse
Original erstellt von TTK-Bandit
das mitm sleep trifft aber trotzdem zu.
Original erstellt von ap0calypse
Kann sleep() auch andere Werte als Sekunden haben? Weil eine Sekunde ist schon ziemlich lang ...

Offenbar nicht. unsigned int ... :/
Original erstellt von Trill
SYNOPSIS
#include <unistd.h>

unsigned int sleep(unsigned int seconds);
Ich glaube nicht, dass sleep das kann, aber nanosleep() dürfte funktionieren :)

Verfasst: 18.11.2004, 23:33
von Roughael
hm sry ich hab mich wohl wieder auf windows bezogen:
VOID Sleep(DWORD milliseconds)
dachte eigentlich die funktion gehört zur standard lib.
hab aber irgendwo ma _sleep() gesehen für milliseconds. und diese funktion is auch in stdlib.h drin.. vieleicht die ma testen ?
Have Fun!
Bandit.

Verfasst: 19.11.2004, 06:54
von qq~
hmm, usleep macht das ganze mit millisekunden und dürfte im gleichen header wie sleep sein!

int usleep(unsigned long mseconds); /*weiß die bezeichnung der seconds variable bei usleep nicht mehr ;) */