Das heißt für mich, wenn in anstelle des Sockets ein seriellen Filedeskriptor nehmen will, reicht es nicht aus, den sockfd gegen z.B. fg zu tauschen?
Muss dann auch die usbip_send usw. umgeschrieben werden?
nman schrieb:
Meinst Du Pfade der Form /eins/zwei/drei ?
Genau das meine ich, aber ehrlich gesagt empfinde ich die Aufgabe als etwas skurril. Aber danke!
Kristallfee schrieb:
du hast in deinem Code den VariablenTyp MacAddress verwendet, welche header-Dateien muss ich einbinden um diesen Variablentyp zu verwenden?
CamelCase ist in den meisten (Netzwerk-)Standardlibraries eher unüblich, sieht eher nach einem simplen Byte-Array aus, das sich der User selbst definiert hat. Wahrscheinlich unsigned char oder so.
So ich habe schon ein Teil des Programms zu ende Programmiert.
Und zwar wird von einem als Argument übergebenem verzeichnis aus alle Unter verzeichnisse rekursiv durch sucht.
Nun habe ich ein Problem und zwar werden /.. und /. als unterverzeichnisse angenommen und deshalb wird die rekursion endlos.
Mein Programm ist folgendes:
#include <iostream>
#include <sys/types.h>
#include <dirent.h>
#include <sys/stat.h>
#include <string.h>
using namespace std;
void rekstat(char* name){
DIR *verzeichnis;
struct dirent *files;
verzeichnis=opendir(name);
struct stat buffer;
//rückgabe von d_type ist char und falls man es in int konvertiert und die rückgabe 4 ist, iste es ein verzeichnis
//falls 8 dann eine Datei
while(files = readdir(verzeichnis)){
if((files->d_type&DT_DIR)){//verzeichnis
char* tmp="/";
strcat(name,tmp);
strcat(name,files->d_name);
//rekstat(name);
}else{//datei
cout<<files->d_name;
cout<<" Datei "<<endl;
stat(files->d_name,&buffer);
cout<<(long long )buffer.st_size<<endl;
}
}
closedir(verzeichnis);
}
int main(int argc, char *argv[]) {
rekstat(argv[1]);
return 0;
}
Seit GDB7 gibt es STL-PrettyPrinter: http://sourceware.org/gdb/wiki/STLSupport
(hab auch mal angefangen PrettyPrinter für Boost zu basteln. Aber daran länger nichts mehr gemacht: http://github.com/ruediger/Boost-Pretty-Printer )
Nein nicht die Dateigrößen. Sondern die Bytes die übertragen werden sollen, sprich die Textlänge. Damit der Client weiß, wieviel er zu empfangen hat. Momentan fordert der Client einfach mal pauschal 1024 Bytes an. Das ist schon allein deswegen schlecht, weil die Dateinamen zusammen auch länger als 1024 Zeichen sein können. Außerdem kann der Client schon vorher zurück kommen, bevor er alle Namen empfangen hat.
Ich hab den Quelltext mal soweit angepasst und bei mir werden die Namen ohne Zugriffsfehler übertragen. Die Programme liefen beide in valgrind zur Überprüfung.
http://pastebin.com/d2b4NEhM
http://pastebin.com/sB7L6hBV
Yamakuzure schrieb:
Sollen die Daten soweit vernichtet werden, dass es auch mit professioneller Software unter Laborbedingungen nicht möglich ist, die Daten widerherzustellen, dann sind natürlich mehr Durchgänge empfehlenswert.
In den Wikipedia-Artikeln steht aber, dass genau das gerade eben nicht nötig ist bei halbwegs aktuellen Festplatten: http://en.wikipedia.org/wiki/Data_erasure#Number_of_overwrites_needed
Wenn man den psychologischen Faktor in Betracht zieht, dann sind natürlich mehrere Durchgänge nötig.
Okay, ich habs jetzt hinbekommen:
g++ `pkg-config --cflags opencv` -o test `pkg-config --libs opencv` ch2_ex2_1.cpp
Hab im obrigen Beipsiel das Input-File vergessen.
Vielen Dank für euere Hilfe!
Greez Tectu
Christoph schrieb:
Vor kurzem gab es einen sehr ähnlichen Thread:
http://www.c-plusplus.net/forum/p1986265#1986265
Letztendlich ist es so, dass das Konzept "eigene IP-Adresse" gar nicht existiert. Ein PC hat oft mehrere IP-Adressen, sogar ein einzelnes Interface kann mehr als eine IP-Adresse besitzen. Schon eine Standardinstallation von Ubuntu legt mehr als eine "eigene IP-Adresse" an, wenn man WLAN aktiv hat und gleichzeitig das Ethernet-Kabel eingesteckt ist.
Bei einem Socket ist es aber einfach: Binde es an die Adresse 0.0.0.0, dann sorgt der Kernel dafür, dass das Socket an alle vorhandenen IP-Adressen gebunden wird.
Die Adresse 0.0.0.0 bedeutet nicht "alle vorhandenen IP-Adressen" sondern nur die IPv4-Adressen. So langsam müssen wir uns daran gewöhnen, dass es neben IPv4 noch was anderes gibt. Für wirklich alle Adressen gibt es die Konstante INADDR_ANY.
Noch besser ist, wenn Du getaddrinfo verwendest und gegen alle Adressen bindest, die Du bekommst. In dem Zusammenhang sollte noch die Socket-Option IPV6_V6ONLY erwähnt werden. Für IPv6-Adressen solltest Du diese Option setzen. Sonst wird auch auf IPv4 gelauscht und das Binden auf 0.0.0.0 schlägt dann fehl (oder auf IPv6, wenn 0.0.0.0 schon dran war).
Im übrigen kannst Du mit dem Kommando "ip addr add" weitere IP-Adressen einem Netzwerkinterface zuordnen.
Gemäß ANSI C Spezifikation liefert system NICHT den Rückgabewert des aufgerufenen Programms, auch ist es für system uninteressant, ob du synchrone oder asynchrone Aufrufe machst. Der system-Rückgabewert ist also praktisch kaum zu gebrauchen.
Hmmm okay, vielen Dank.
Ist zwar nicht der "direkte" Weg an den ich eigentlich dachte aber das heißt nicht dass das nicht vielleicht sogar der bessere ist.