september05 programmieraufgabe

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

september05 programmieraufgabe
hi! ich hab mir heut mal diese programmieraufgabe angeschaut und wollt mal fragen ob jemand an der einen oder anderen stelle eine gute lösung oder einen tipp parat hat! beim punkt “dateinamen einlesen und bearbeiten”:

char buffer[1025];
read(fd,buffer,1025);
wie kann man da am besten die einzelnen filenamen oder dir-namen rausfiltern wenn mehrere hintereinander gesendet werden;
kann mir da vielleicht jemand nen tipp oder einen codeauszug von sich mal zeigen!!
(vielleicht könnte man strtok nehmen!???)

beim punkt “fhandle”:
mein vorschlag wäre:
fd = open(path,“r”);
fd_out = fileno(s);

und dann irgendwie read und write hintereinander ausführen;
bis read EOF liefert und dann den rest vom puffer noch writen;
(funktioniert des so in etwa)
vielleicht hat auch da jemand nen tipp für mich!


Hallo, wenn du mehrere Dateinamen pro Zeile akzeptieren willst (was ja nicht verlangt ist) musst du den String halt durchgehen und nach ’ ’ suchen… wobei das ’ ’ nicht maskiert '\ ’ sein darf! Aber ansonsten, ja vielleicht ein strtok…

Ich hab den buffer durch ein malloc mir geben lassen, weil ich denke das sollte sonst mit dem Stack net so ganz funktionieren!

while (fgets(input, 1024, stream) != NULL) {
	trim(input);
	handle(stream, input);
}

trim macht nur aus dem ‘\n’ ein ‘’.

Beim fhandle würde ich das auch so machen wie du… Halt auch wieder recht große Stücke reinschieben, da das Zeug ja eh nochmal gepuffert is alles.

file = fopen(path, "r");
// Fehlerabfrage

while (!feof(file)) {
	if (fgets(output, 1024, file) != NULL) {
		fputs(output, socket);
	}
}

Als ich mein Zeug getestet hab, ging alles… Wenn da jetzt noch ein Zeichen hin oder her irgendwo ein Puffer falsch ist oder sonst was, dann reichts trotzdem zum Klausur bestehen g


super! danke für die antwort!


bin noch ziemlich am Anfang der Aufgabe und hab scho eine Frage:

In was fuer einen Rinpuffer sollen wird die Socketdeskriptoren eintragen? Es sind gar keinen Prototypen gegeben oder wie man diesen Ringpuffer anwenden soll?

Waer fuer jeden Tipp dankbar :slight_smile:


hat nicht jemand lust mal seine lösung mal rein zu stellen um mal so einen allgemeinen besseren überblick zu bekommen


https://maskador.de/mc/server.c
So frei nach der Semptember05 Aufgabe gecodet. Sollte nur zum Überblick dienen und z. T. werden Filedescriptoren nicht zugemacht etc. Funktioniert aber und wer lust hat darfs gerne Verbessen :wink:


ahjo danke … ringpuffer selber gecodet …dass ma da mal net einen knoten ins Hirn bekommt


wenn man einmal selbst drauf kommt gehts :wink:


Das war der fdserver, oder?
Ich habe auf die Schleife beim Schreiben verzichtet.
Sagt mir denn der Rückgabewert von fputs wie viel schon geschrieben wurde?

Die Ringpuffer selbst ist nicht so schwer - modulo hilft da gewaltig.

Meine Version kann man sich hier laden.

(http://dl.hehejo.de/)


hier hat man aber doch im gegensatz zum jbuffer ne mehrseitige synchronisation, also denk ich mal braucht man 3 semaphoren (-> lock, full, free-semaphoren), oder?


Also ich habe zwei Semaphoren die erstmal den Zugriff auf den Ringpuffer regeln.
Einen Semaphor zum Reinschreiben und einen zum Rauslesen.
(also full und free).
Dann hab ich noch einen Mutex damit beim Lesen nix passiert.
Wenn mehrere Threads lesen und dann mit lesezeiger++%NTHREAD loslegen kann’s ja knallen.
Also da noch einen Mutex rum und Butter bei die Fische.


Sag mir nicht du hast 5 Semaphoren…

Es reicht doch wenn du einen hast, der den Zugriff auf den Speicher (an sich) koordiniert. Also so hab ich das zumindest… Kann man zwar schlecht testen, aber soweit ich weiß hat das der wosch und der juk auch nie anders angesprochen. Also was ich mein ist, dass die zwei nie was anderes (also mehr semaphoren) erwähnt hatten!


Er hat afaik genau wie ich 2 Semaphoren (“frei” u “enthalten” wenn du so willst) und nen Lese-Mutex. Steht übrigens auch genauso im Skript, wo bounded-buffer gemacht wird. Da benutzen sie das Mutex glaube halt gleichzeitig noch als Schreibe-Mutex, weil sie auch mehrere Schreiber zulassen.


joar ich hab auch 2 semaphoren und nen mutex, den aber nur damit sich die leser net in die quere kommen - wüsste jetzt auch nicht wie das anders gehen soll …


Jo, so find ich das gut… Der traute Kreis und eine Meinung g