was ist das denn für ein Text?? Sind nicht alle solche Superhelden!!
Zur Erklärung: Wenn man nicht so richtig weiß, um was es sich bei den Strukturen so handelt, dann ist es schon nicht so einfach den Sinn zu verstehen.
Aber glücklicherweise gibt es Forumuser, die nicht so große Helden sind und die können dann auch produktiv helfen!!!!
Grüße
Hier das, was mir dann geholfen hat!!!
http://www.c-plusplus.net/forum/viewtopic-var-t-is-141582-and-highlight-is-hardwareadresse.html
#include "dein_header.h" in allen *.c files wo du die defines brauchst,
das ist eigentlich der normale weg.
alternativ kannst du ein #define <name> <value> auch dem compiler per
-D <name>=<value> mitgeben zumindest beim gcc
Hallo!
Ich habe 3 kurze Fragen. Ich habe gelesen, dass man den Apache in mehreren Modi - entweder als Prefork (1 Prozess pro HTTP-Anfrage) oder mit Worker-Threads (mehrere Anfragen pro Child-Prozess) benutzen kann.
1. Der letzte Modus würde ja bedeuten, dass man z.B. mit der fork-Funktion den Socket "kopieren" und in mehreren Prozessen (darin wieder mehreren Threads) auf dem gleichen Socket lauschen und Verbindungen annehmen kann?
2. Wie sieht das Ganze praktisch aus? Wenn mir im Poll ein Event angezeigt wird und mehrere Prozesse/Threads auf dem Socket gleichzeitig lauschen, zeigt dann z.B. epoll das Event in mehreren Threads gleichzeitig an oder wird es nur dem "Ersten" "zugeteilt", der es dann verarbeitet? Wenns im Apache geht, müsste es doch auch für einen "Normalo-Programmierer" gehen, oder wie schafft der Apache das?
3. Im Forum wird ja manchmal eine Lösung Listenthread - Queue - Worker-Threads favorisiert. Ginge es auch, dass die Worker-Threads selbst sich im Poll die Aufgaben "ziehen" und verarbeiten? Dann könnte man ja etliche Mutexe und Queues als "Performance-Killer" einsparen...
Viele Grüße
also ich tu mich noch ein bisschen schwer mit den sockets, bleibe da aber noch dran. 2MB/sek ist auch weit über dem was ich benötige.
die Synchronisation mit den Semaphoren ist wohl auch machbar, wobei ich da noch überlegen muss wie ich das vom Ablauf her genau mache, denn so wie ich das bis jetzt verstanden habe gibt es nicht noch prioritäten in den Semaphoren? Sperre ich also den Speicher weil mein Client darauf zugreifen will, kann der server nicht mit den Daten rechnen?
In dem Fall müsste ich wohl zwischen Shared Memory und se2rver nochmal Daten speichern so das der server mit diesen Daten rechnet und "bei Bedarf" diese Daten dann mit dem shared memory abgeglichen werden?
Ich weiß jetzt nicht was du mit Terminalfenster meinst.
Terminal = bash, shell etc.
Unter OS X heisst das Ding Terminal, Beim PC Eingabeaufforderung oder DOS-console, als externes ssh Proggi z.b. putty etc.
Wenn ich nen Skript nehme (egal ob da jetzt dialog aufgerufen wird), es ausführbar mache und mit der Maus draufklicke, wird das Skript ohne ein "Terminalfenster" ausgeführt. Also ohne dialog kriegt man nichts direkt davon mit, sonst wird ja nen Dialog angezeigt (je nach dem was man dialog aufträgt).
Ja, bei Linux ist das so, aber z.b. bei OS X und auch noch manch anderen Unix-basierten Systemen nicht
t-rags schrieb:
3. Dass die passwortlose Authentifizierung (ohne Passphrase) sicherer ist, halte ich darüber hinaus für geradezu naiv: Dieser Server (und garantiert tausende andere auch) hat derartig offene Scheunentore, dass es für Netzwerk-Hacker ein Kinderspiel wäre, an die ~/.ssh/id_dsa zu gelangen. Aber das ist ja hier nicht Thema.
es ist sicherer. Außerdem zwingt dich keiner, ~/.ssh/id_dsa zu benutzen. Ich hab z.b. meine SSH-Keys ganz wo anders.
ASCII hat 7 Bit, daher sind Zeichen größer als 0177 nicht mehr Teil von ASCII. Alles was drüber passiert ist abhängig vom konkreten Encoding. Daher kann 0304 kein ASCII Zeichen sein und deine Terminalemulation hat vermutlich ein anderen Zeichencodec, als du erwartest.
Für kbhit und getch schau mal in die FAQ
nman schrieb:
Eigentlich schreibst Du primär im Unixforum, wir verwenden hier durchaus nicht nur C und C++.
Wenn Du mit C oder C++ arbeiten möchtest, kannst Du entweder die Ausgabe von man: pgrep parsen (einfach) oder durch die Inhalte von /proc durchiterieren (auch einfach), da siehst Du unter /proc/12345 sämtliche interessanten Daten zum Prozess mit der PID 12345 (etwas anderes macht pgrep auch nicht).
edit: Siehe hierzu auch man: proc(5).
Oder du legst ne pipe und führst dadurch den Consolen Befehl aus. Damit verlierst du nicht die Kontrolle über dein Programm und kannst Ausgaben abfragen etc.
Tag an alle,
Ich sizte nun schon seit 3 tagen an diesem Problem und habe alles was in meiner Macht steht versucht um es zu beheben --> erfolglos;
Was ich vorhabe ist relativ simpel:
Via Raw Sockets ein Tcp Syn paket verschicken ( und später noch auf Acks reagieren)
int send_tcp_syn()
{
int sock, one = 1;
if( (sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP)) == -1) {
perror("building socket");
return -1;
}
paket_size = sizeof(struct tcphdr) + sizeof(struct iphdr);
paket = (unsigned char*) malloc(paket_size);
struct iphdr *ip = (struct iphdr *) paket;
struct tcphdr *tcp = (struct tcphdr *) (paket + sizeof(struct iphdr));
memset(paket, 0, paket_size);
/* set ip attributes */
ip -> version = 4;
ip -> ihl = 5;
ip -> ttl = 255;
ip -> id = htonl( random() );
ip -> daddr = inet_addr(HOST_IP);
ip -> saddr = inet_addr( get_random_ip() );
ip -> protocol = IPPROTO_TCP;
ip -> tot_len = paket_size;
/* tcp attributes */
tcp -> source = htons(HTTP_PORT);
tcp -> dest = htons(HTTP_PORT);
tcp -> seq = htonl(1000000000);
tcp -> ack_seq = htonl(1000000000);
tcp -> syn = 1;
tcp -> window = htons(1024);
tcp -> check = 0;
host.sin_family = AF_INET;
host.sin_port = tcp -> dest;
host.sin_addr.s_addr = ip -> daddr;
if( setsockopt(sock, IPPROTO_IP, IP_HDRINCL, &one, 1) == -1) {
perror("setsockopt");
return -2;
}
if( sendto(sock, paket, paket_size, 0, (struct sockaddr *)&host,
sizeof(host)) < 0 ) {
perror("sendto");
return -3;
}
return 0;
}
Wenn ich das ausgehende paket sniffe, erhalte ich einen beschnittenen tcp header und einen Hinweiss vom sniffer
bogus tcp header length( must be at least 20)
Vielen Dank schonmal für eure Hilfe
Gruss Darrel
Moin,
Ich bin neu auf den Foren hier, wies ausschaut passt mein Problem(chen) hier rein.
Ich hab ein Serverprogramm geschrieben, welches auf einem Ubuntu 8.04 (64bit) läuft. Selbiges benutzt epoll mit nichtblockierenden Sockets. Hinzugefügte Sockets werden konfiguriert mit der Eventmaske EPOLLIN | EPOLLET | EPOLLONESHOT :
epoll_event ev;
ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
if (epoll_ctl(epfd,EPOLL_CTL_ADD,iSocket,&ev)<0);
{...
das funktioniert fehlerfrei.
Die Daten werden dann aus dem Socket gelesen. Vor der Verarbeitung setze ich erneut eine Eventmaske (da die Reaktivierung aus einem anderen thread stattfindet) :
epoll_event ev;
ev.events = EPOLLIN | EPOLLET | EPOLLONESHOT;
if (epoll_ctl(epfd,EPOLL_CTL_MOD,iSocket,&ev)<0)
{...
Hierbei gibt epoll_ctl -1 zurück. Die Fehlerbehandlung meldet mir Fehler 11 (strerror liefert : Resource temporarily not available). Speicher ist jedoch durchaus genug frei, die Fehlermeldung scheint also nicht eindeutig...
Gibt es Erfahrungen, welche Fehler ein solches Verhalten auslösen würden bzw. wie diese zu lösen sind ?
EDIT :
Die Fehlerquelle war lediglich die Handhabung der Parameter für epoll_wait in meinem entsprechenden Workerthread. Das benötigt nämlich in der Übergabe einen Zeiger auf ein Array aus epoll_events festgelegter Größe, nicht aber ein stumpf definiertes epoll_event, was man leider in einigen Tutorials/Dokus findet. Dann funzt zwar die Ausgabe einzelner Events, aber leider kann es durchaus vorkommen daß der zurückgegebene Inhalt eben ein paar mikrosekunden später für den anderen thread ins Nirvana zeigt, und bei der nächsten Verwendung gehts halt in die Hose
davidwal2 schrieb:
Mhhhh, diese Funktionalität muss es ja geben, da mein OS(GNU/Linux 2.6) ja schon längst die MacAdresse ausgelesen hat und temp abgelegt hat, oder?
das auslesen der mac-adresse von der hardware macht der treiber. und der ist ja speziell für diese hardware entwickelt worden. linux selber kann wohl schlecht alle ethernet-chips dieser welt kennen.
Dieser Thread wurde von Moderator/in Nobuo T aus dem Forum Assembler in das Forum Linux/Unix verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?
Dieses Posting wurde automatisch erzeugt.