kompositeur schrieb:
ich habe probleme beim kdeveloper c++ unter freebsd einfache dateien wie iostream zu includen(wird nicht gefunden). warum?
using namespace std;
@daHa: Ah jetzt. Du hast es mir jetzt nochmal genau aufgeschlüsselt. Ich dachte, die Datei müsste mir gehören und dann mit root das s-Bit setzen.
Jetzt hab ichs kappiert und es funktioniert.
Danke
Der listen(2)-Aufruf hat als 2. Parameter den backlog. Das gibt die Anzahl der Verbindungsanforderungen von Clients an, die vom Kernel gesammelt werden, ohne daß der Server accept verwendet. Erst wenn der backlog voll ist, wird eine weitere Verbindung abgelehnt.
Der 2. Client kann senden, bis der Empfangspuffer voll ist.
Wenn du poll benutzt, dann kannst du dir das HUP (Hang Up) Event ausgeben lassen. Sonst kannst du bei blockierenden Sockets feststellen, ob die Verbindung getrennt wurde, wenn dir recv 0 Bytes empfängt, also 0 zurück gibt.
... und noch einen Nachtrag:
ich würde bei
rc = recv(s,buf,MAX_LENGHT,0);
als maximale Länge MAX_LENGTH-1 angeben, wenn Du hinten (maximal an der letzten Position) noch 0x00 ranhängen willst.
... und eine weitere Idee:
Bei mir sieht der Ablauf bei Benutzung eines select() anders aus, ganz grob so:
while (1)
{
FD_ZERO(..);
FD_SET(..);
rc = select(...) /* wartend mit timeout */
if (rc < 0)
...Fehler...
else if (rc == 0)
...timeout...
break;
else if (FD_SET(...))
...lesen von socket/filedescriptor...
}
Wenn ich den Ablauf in Deinem Programm richtig interpretiere, machst Du ein blockierendes Lesen mittels recv() und prüfst dann, ob noch was auf dem Kanal da ist. Was ist aber, wenn vom dem kompletten Socket-Puffer alles in Deinen Puffer eingelesen wurde, d.h. alle Input-Bytes verbraucht sind, und bis zu Deinem select() - Aufruf keine neuen Daten vom Client angekommen sind?
... ach so, typisch ist bei Unix/Linux auch noch, dass der select() sporadisch auch noch unterbrochen wird und dann mit -1 und errno==EINTR zurückkommt (was dann keinen Fehler darstellt). Auf anderen Unix-Dirivaten, z.B. Solaris sind dann auch noch weitere Interrupts möglich/erlaubt.
Hier die Variablen für die Tastencodes:
char iKeyLeft = '4', iKeyUp = '8', iKeyRight = '6', iKeyDown = '2', iKeyAction = '5', iKeyExamine = '0', iKeyCancel = ',';
Und hier ein beispielhafter Aufruf:
char iKey = getch();
if(iKey == iKeyLeft || iKey == iKeyLeft_)
printf("LEFT was pressed.");
else
printf("Unknown key.");
Der Code funktioniert nur unter Win32, unter Debian wird keine der Tasten erkannt (es sei denn ich nehm die Zahlenreihe).
EinLinuxNutzer schrieb:
woher wisst ihr das ich was mit nem bootloader machen will .
da haben mich wohl die 512B verraten
danke für die vielen antworten. ihr habt mir sehr sehr sehr geholfen.
hier komme ich öfter her um zu fragen falls ich wieder nen prob hab bzw.
um eventuell mal selbst helfen zu können.
EinLinuxNutzer
bootloader schreibt man normalerweise in Assembler wegen der seh begrenzten Größen auf 512 bytes. ( Naja, eiegtnlich noch weniger wegen der tabelle )
Da eigentliche OS ( welches du voraussichtlich schrieben möchtest ) solltest du in einer höheren Sprache schreiben.
Hallo !
Ich will den DDD http://www.gnu.org/software/ddd/ benutzen um meinen Code zu debuggen. Wenn ich das Teil starte und die Bindatei einlese, kann ich in meinen cpp-Dateien Linebreaks setzen. Allerdings wird der Quellcode nicht komplett im Fenster angezeigt, so daß ich die letzen Zeilen Code nicht erreiche, um dort ein Linebreak setzen zu können. Leider weiß ich nicht wo die Option ist mit der man einstellen kann, wieviele Zeilen angezeigt werden sollen.
Kann mir da jemand helfen ?
Grüße
Tom
kingruedi schrieb:
Wenn du gcc oder g++ benutzt? Sollte eigentlich nicht so sein und war auf allen Debian Rechnern die ich benutzt habe nicht so.
Ach hab mich geirrt. Jetzt gehts. Muss wohl damals denn gcc bei c++ progs genutzt haben oder so änlich. Zumindest gehts jetzt.
GUI bezeichnet eine grafische Benutzer Schnitstelle
http://en.wikipedia.org/wiki/Graphical_user_interface
Eine Taskleiste ist auch eine GUI. Aber er in gleicher Relation wie ein Mensch ein Lebewesen ist. Die Frage "Kennst du ein Lebewesen was 2.20m groß ist?" und "Kennst du einen Mensch der 2.20m groß ist?" sind unterschiedlich (oder etwa nicht?). Genauso ist das wenn du nach einer Taskleiste oder einem Windowmanager fragst und dafür GUI benutzt. (Tut mir leid, mir fällt kein besseres Beispiel ein. Aber ich hoffe du verstehst es)