Not logged in. · Lost password · Register

Guardian
Avatar
Member since Oct 2002
797 posts
Subject: Non-Canonical...was mache ich falsch?
Hey.

Ich komm bei Aufgabe9 einfach nicht mehr weiter. Ich habe die Umstellung der Konsole wie im Skript beschrieben in das Programm implementiert.

Habe ich es nun richtig verstanden, dass jedes Zeichen, dass man beim Erzeuger eintipt SOFORT vom Verbraucher angezeigt werden soll?

Wenn ja: Warum geht es bei mir nicht? Wie gesagt, wie im Skript umgestellt, es gab auch keine Fehler dabei. Hat jemand Tips, Infos oder gibt es bekannte Fallen, die ich nicht kenne?

Danke schonmal  :-)
Der Anführer eines großen Heeres kann besiegt werden. Aber den festen
Entschluß eines einzigen kannst Du nicht wankend machen.
juk
Member since Dec 2003
383 posts
Quote by Guardian:
Hey.

Ich komm bei Aufgabe9 einfach nicht mehr weiter. Ich habe die Umstellung der Konsole wie im Skript beschrieben in das Programm implementiert.

Habe ich es nun richtig verstanden, dass jedes Zeichen, dass man beim Erzeuger eintipt SOFORT vom Verbraucher angezeigt werden soll?

Wenn ja: Warum geht es bei mir nicht? Wie gesagt, wie im Skript umgestellt, es gab auch keine Fehler dabei. Hat jemand Tips, Infos oder gibt es bekannte Fallen, die ich nicht kenne?

Danke schonmal  :-)

cc[VMIN] auf 1 gesetzt?
macht der Verbraucher putchar? Wenn ja, das puffert zeilenweise
in der stdio-libraryfunktion. Um den Puffer rauszuschreiben muss
man fflush(stdout) aufrufen.

Wenn das auch nicht reicht wuerde ich erst mal die Treiberumstellung
mit einem ganz einfachen Programm alleine testen:
Treiber auf non-canonical stellen.
while getchar { putchar; fflush}

Wenn das funktioniert aber mit dem erzeuger/verbraucher tut das
gleiche nicht, dann kann auch noch ein Fehler in der Koordinierung
drin sein.
Guardian
Avatar
Member since Oct 2002
797 posts
Wunderbar, danke!! Ein simples fflush(stdout) hat gelangt  :cheesy:
Der Anführer eines großen Heeres kann besiegt werden. Aber den festen
Entschluß eines einzigen kannst Du nicht wankend machen.
tsunami
skankin´ foot
Avatar
Member since Jan 2003
352 posts
nach der manpage von termios zu urteilen sollte es bei der 9c ja reichen, VMIN = 0 und VTIME = 5 zu setzen. Das aberwitzige dabei ist, dass, sobald ich im Erzeuger ein Zeichen eingebe, der Verbraucher es alle 0,5 Sekunden ausgibt. Also entweder spinnt der Verbraucher oder der Erzeuger schreibt tatsächlich alle 0.5 Sekunden das eingebene Zeichen an die nächste Speicherstelle. Sobald ich ein weiteres Zeichen eingebe, macht er das gleiche mit dem neuen Zeichen. was läuft da schief?
once you had a dream
of oceans, and sunken cities;
memories of things you´ve never known
and you have never known...   (Michael Stipe)
Guardian
Avatar
Member since Oct 2002
797 posts
Man muss den VMIN Wert möglichst hoch ansetzen. VMIN steht wohl über VTIME. Das heißt: VMIN=1 => Nach einem Zeichen wird auf jeden Fall übergeben. VMIN=2 => Sobald 2 Zeichen getipt wurden wird auf jeden Fall übergeben!!

Also VMIN so setzen, dass man diesen Wert auf keinen Fall in 0,5Sekunden erreichen kann.
Der Anführer eines großen Heeres kann besiegt werden. Aber den festen
Entschluß eines einzigen kannst Du nicht wankend machen.
tsunami
skankin´ foot
Avatar
Member since Jan 2003
352 posts
is ja logisch...  :-p  hab ich wohl aweng falsch gedacht gestern... danke!
once you had a dream
of oceans, and sunken cities;
memories of things you´ve never known
and you have never known...   (Michael Stipe)
Yves
Code artist
(Administrator)
Avatar
Member since Nov 2002
3282 posts
Gilt die Terminal-Einstellung non-canonical eigentlich auch für die Ausgabe von Zeichen? Also könnte ich mit ~ICANON auch den Verbraucher auf ungepufferte Zeichenausgabe umstellen?
Physikalisch gesehen ist ein Quantensprung die kleinstmögliche Zustandsänderung, meist von einem höheren auf ein niedrigeres Niveau.

Komprenu Energiemonitoring-Software | dotforward Webhosting
juk
Member since Dec 2003
383 posts
Noe, bei der Ausgabe puffert jemand anderes.
Bei der Ausgabe puffern nur die stdio-Funktionen der C-Library
(also printf, putchar und so). Das Betriebssystem puffert nichts
mehr wenn's die Zeichen mal hat.
Also entweder man ruft direkt write auf oder man sagt mit fflush(stdout)
dem stdio-Modul dass es rausschreiben soll (z.B. nach jedem putchar).
Klöbi
Member since Oct 2002
76 posts
Du kannst auch die Ausgabe auf ungepuffert stellen, aber nicht am Terminaltreiber. Die Funktion heisst, glaub ich,

setvbuf(...);

Hab jetzt leider kein Linux zur Hand, um das zu checken oder die Argumente rauszusuchen... Guck mal in die Manpage!
Ich wünsche allen allzeit gesunde Daumen!  ;-)
Close Smaller – Larger + Reply to this post:
Verification code: VeriCode Please enter the word from the image into the text field below. (Type the letters only, lower case is okay.)
Smileys: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Special characters:
Go to forum
Datenschutz | Kontakt
Powered by the Unclassified NewsBoard software, 20150713-dev, © 2003-2011 by Yves Goergen