<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Suche Buffered-File Klasse]]></title><description><![CDATA[<p>Hi!</p>
<p>Die MSVC CRT erlaubt nur maximal 2048 gleichzeitig offene Files. Dummerweise hab' ich jetzt aber eine (Server-) Applikation, wo ich mehr bräuchte. Das Limit ist in der CRT, Windows selbst hat überhauptkein Problem mit etlichen Zehntausend offenen Files in einem Prozess (hab mal 60k probiert -&gt; kein Problem).</p>
<p>Direkt HANDLEs zu verwenden wäre natürlich einfach. Ich hätte aber schon ganz gerne &quot;buffered IO&quot;, da sonst einige Dinge ziemlich langsam werden.</p>
<p>Kennt jemand eine fertige Klasse die sowas anbietet? Bzw. eine (kleine) Library die sowas beinhaltet? Hab nämlich nicht unbedingt Lust mir sowas selbst zu schreiben, wenn es nicht sein <em>muss</em>... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>(Ich weiss, das ist MSVC spezifisch, aber das MSVC spezifische ist ja eigentlich nur das Problem. Was ich suche ist ja eigentlich Plattform-neutral, daher poste ich im C++- und nicht im MSVC- oder WinAPI-Forum)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239763/suche-buffered-file-klasse</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 03:41:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239763.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Apr 2009 18:19:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 27 Apr 2009 18:19:54 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Die MSVC CRT erlaubt nur maximal 2048 gleichzeitig offene Files. Dummerweise hab' ich jetzt aber eine (Server-) Applikation, wo ich mehr bräuchte. Das Limit ist in der CRT, Windows selbst hat überhauptkein Problem mit etlichen Zehntausend offenen Files in einem Prozess (hab mal 60k probiert -&gt; kein Problem).</p>
<p>Direkt HANDLEs zu verwenden wäre natürlich einfach. Ich hätte aber schon ganz gerne &quot;buffered IO&quot;, da sonst einige Dinge ziemlich langsam werden.</p>
<p>Kennt jemand eine fertige Klasse die sowas anbietet? Bzw. eine (kleine) Library die sowas beinhaltet? Hab nämlich nicht unbedingt Lust mir sowas selbst zu schreiben, wenn es nicht sein <em>muss</em>... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>(Ich weiss, das ist MSVC spezifisch, aber das MSVC spezifische ist ja eigentlich nur das Problem. Was ich suche ist ja eigentlich Plattform-neutral, daher poste ich im C++- und nicht im MSVC- oder WinAPI-Forum)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702206</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702206</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 27 Apr 2009 18:19:54 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 27 Apr 2009 19:06:40 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Direkt HANDLEs zu verwenden wäre natürlich einfach. Ich hätte aber schon ganz gerne &quot;buffered IO&quot;, da sonst einige Dinge ziemlich langsam werden.</p>
</blockquote>
<p>Wenn man es nicht explizit abstellt ist der Zugriff doch buffered, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702238</guid><dc:creator><![CDATA[Nachfrager]]></dc:creator><pubDate>Mon, 27 Apr 2009 19:06:40 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 27 Apr 2009 21:16:31 GMT]]></title><description><![CDATA[<p>Nachfrager schrieb:</p>
<blockquote>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Direkt HANDLEs zu verwenden wäre natürlich einfach. Ich hätte aber schon ganz gerne &quot;buffered IO&quot;, da sonst einige Dinge ziemlich langsam werden.</p>
</blockquote>
<p>Wenn man es nicht explizit abstellt ist der Zugriff doch buffered, oder?</p>
</blockquote>
<p>Nur im Kernel-Mode, über den normalen File-Cache.<br />
100.000x ReadFile mit einem Byte ist allerdings *VIEL* langsamer, als wenn im User-Mode nochmal ein (kleiner) Buffer verwendet wird.</p>
<p>(auf Deutsch: jeder einzige ReadFile Befehl führt dazu dass eine User-Mode -&gt; Kernel-Mode Transition stattfindet, ein neuer IRP erstellt wird, der IRP an den zuständigen Treiber übergeben wird, dann irgendwann &quot;bedient&quot;, dann wieder freigegeben, dann wieder eine Kernel-Mode -&gt; User-Mode Transition, und dann irgendwann, 100 Jahre später, kommt ReadFile zurück. Und alle diese Zwischen-Schritte sind (vergleichsweise) teuer. Auf jeden Fall 100x teurer als ein paar einfache &quot;ifs&quot; im User-Mode. Selbes für Spiel WriteFile.)</p>
<p>Probier mal aus was es für einen Unterschied macht, wenn du ein File byteweise kopierst. 1x über FILE*, und 1x über HANDLE. Dann weisst du was ich meine, und warum CRT Implementierungen üblicherweise ihren eigenen User-Mode Buffer verwenden.</p>
<p>Natürlich könnte man auch das Programm so umstellen, dass Daten in ausreichend grossen Stücken gelesen/geschrieben werden. Ist aber umständlicher, als das ganze gleich &quot;eine Ebene tiefer&quot;, nämlich in der File-Schnittstelle zu implementieren. &quot;Eine ebene höher&quot; sind es nämlich viel mehr Stellen die man anpassen müsste. Und ich mache lieber 1x was ich 1x machen kann, und nicht Nx machen muss <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702309</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 27 Apr 2009 21:16:31 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 27 Apr 2009 22:27:08 GMT]]></title><description><![CDATA[<p>Was brauchst du denn alles an Funktionalität? Nur rohes (binäres) Lesen und Schreiben (und Seeken) oder auch die Stream-Sachen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702339</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702339</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 27 Apr 2009 22:27:08 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 27 Apr 2009 22:58:25 GMT]]></title><description><![CDATA[<p>Nur binary IO reicht vollkommen.<br />
Seeken brauch ich auch, ja.<br />
(Eine Klasse die mir gleich &quot;read at&quot; und &quot;write at&quot; anbeitet wäre sogar ideal. Über seek+read bzw. seek+write geht's aber natürlich auch.)</p>
<p>Eigentlich der klassische Anwendungsfall für die FILE* Funktionen, aber wie gesagt: die MSVCRT macht mir da leider einen Strich durch die Rechnung.</p>
<p>BTW: bitte niemand memory-mapped IO vorschlagen. Wenn ich genügend Adressraum übrig hätte, um mit memory-mapped IO zu arbeiten, bräuchte ich garkeine Files <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
(Portierung auf 64 Bit möchte ich vermeiden wenns geht)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702347</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 27 Apr 2009 22:58:25 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 07:25:20 GMT]]></title><description><![CDATA[<p>Ich habe leider nur bedingt eine Ahnung davon, wie man unter Windows an die Kernelmodezugriffe herankommt. Aber Du scheinst ja ein Testprogramm dafür gemacht zu haben.</p>
<p>Aber wirklich plattformneutral wird es wohl schwierig werden, wenn die Standard<br />
IO-Funktionen nicht die gewünschte Funktionalität bieten.</p>
<p>Könntest Du nichht auf Grundlage der von Dir benutzen Kernelmode-Funktionen eine eigene filebuf-Klasse implementieren, welche die gewünschte Funktionalität anbietet? Die Filebuffer lassen sich leicht austauschen, wenn man die Plattform wechselt (auf *n*x*-Systemen könnte man z.B. die Standardvariante benutzen).</p>
<p>Naja, vermutlich ist die Idee völlig scheisse...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702399</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 28 Apr 2009 07:25:20 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 07:35:47 GMT]]></title><description><![CDATA[<p>blöde Frage: was spricht nochmal genau gegen std::fstream? der enthaltene filebuf <em>ist</em> doch gepuffert. Und wenn dir dort die Pufferung nicht genug ist, dann kannst du mit streambuf::pubsetbuf() einen größeren Puffer zur Verfügung stellen. (wobei du da bei zigtausend files natürlich irgendwann aufpassen musst).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702409</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702409</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 28 Apr 2009 07:35:47 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 07:43:55 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>blöde Frage: was spricht nochmal genau gegen std::fstream? der enthaltene filebuf <em>ist</em> doch gepuffert. Und wenn dir dort die Pufferung nicht genug ist, dann kannst du mit streambuf::pubsetbuf() einen größeren Puffer zur Verfügung stellen. (wobei du da bei zigtausend files natürlich irgendwann aufpassen musst).</p>
</blockquote>
<p><code>std::fstream</code> schafft aber nicht mehr als 2048 offene Handles gleichzeitig. Und wenn ich das richtig verstanden habe, liegt genau da das Problem. Defaultmäßig scheint es sogar noch weniger zu sein, aber über <code>_setmaxstdio</code> lässt sich das immerhin auf 2048 erhöhen.</p>
<p>Ich habe mich gerade mal aus Interesse etwas schlau gemacht. Mit der WinAPI kommt mit den Default-Einstellungen auf 10000 offene Handles. Und es gibt Funktionen, mit denen man dies noch weiter erhöhen kann.<br />
Bei den Funktionen aus der CRT kommt man allerdings tatsächlich nicht über 2048.<br />
Ich würde da tatsächlich eine eigene filebuf Klasse auf der Grundlage der WinAPI-Funktionen implementieren. So ist es mit minimalen Aufwand möglich, das Programm zu portieren.</p>
<p>Edit: Siehe auch <a href="http://msdn.microsoft.com/de-de/library/6e3b887c(VS.80).aspx" rel="nofollow">hier</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702411</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 28 Apr 2009 07:43:55 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 18:52:56 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>Ich habe leider nur bedingt eine Ahnung davon, wie man unter Windows an die Kernelmodezugriffe herankommt. Aber Du scheinst ja ein Testprogramm dafür gemacht zu haben.</p>
<p>Aber wirklich plattformneutral wird es wohl schwierig werden, wenn die Standard<br />
IO-Funktionen nicht die gewünschte Funktionalität bieten.</p>
</blockquote>
<p>Die Lösung muss auch nicht unbedingt Plattform-Neutral sein, es reicht Windows. Ich meinte bloss, dass eine Decorator-Klasse, die auf einem ungepufferten &quot;read/write/seek&quot; Interface ein gepuffertes macht, eigentlich nicht OS-spezifisch ist. So war das zu verstehen. Die Windows Kernel Calls kenne ich ausreichend gut, das wäre nicht das Problem.</p>
<blockquote>
<p>Könntest Du nichht auf Grundlage der von Dir benutzen Kernelmode-Funktionen eine eigene filebuf-Klasse implementieren, welche die gewünschte Funktionalität anbietet? Die Filebuffer lassen sich leicht austauschen, wenn man die Plattform wechselt (auf *n*x*-Systemen könnte man z.B. die Standardvariante benutzen).</p>
<p>Naja, vermutlich ist die Idee völlig scheisse...</p>
</blockquote>
<p>Die Idee ist nicht völlig scheisse, aber eigentlich genau das was ich vermeiden möchte: nämlich selbst was zu basteln. Solche Sachen sind extrem nervig zu testen, und ich bin (zumindest bevor ich angefangen habe zu suchen) davon ausgegangen, dass es sowas doch schon zu Hauf geben müsste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702817</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2009 18:52:56 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 18:56:00 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>blöde Frage: was spricht nochmal genau gegen std::fstream? der enthaltene filebuf <em>ist</em> doch gepuffert. Und wenn dir dort die Pufferung nicht genug ist, dann kannst du mit streambuf::pubsetbuf() einen größeren Puffer zur Verfügung stellen. (wobei du da bei zigtausend files natürlich irgendwann aufpassen musst).</p>
</blockquote>
<p>Nönö, siehe Tachyons Beitrag: die Pufferung von fstream wäre 100% OK, bloss verwendet die fstream Implementierung in der MSVC Library eben die FILE* Funktionen, und die FILE* Funktionen sind auf 2048 Files limitiert. Genau das ist ja das Problem. Sprich: ich kann 2048-3=2045 fstream Objekte aufmachen (fstream.open()), beim 2046. bekomm ich einfach nen Fehler. (Schon ausprobiert, also nicht bloss hörensagen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702818</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2009 18:56:00 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 19:01:19 GMT]]></title><description><![CDATA[<p>Tachyon schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>blöde Frage: was spricht nochmal genau gegen std::fstream? der enthaltene filebuf <em>ist</em> doch gepuffert. Und wenn dir dort die Pufferung nicht genug ist, dann kannst du mit streambuf::pubsetbuf() einen größeren Puffer zur Verfügung stellen. (wobei du da bei zigtausend files natürlich irgendwann aufpassen musst).</p>
</blockquote>
<p><code>std::fstream</code> schafft aber nicht mehr als 2048 offene Handles gleichzeitig. Und wenn ich das richtig verstanden habe, liegt genau da das Problem. Defaultmäßig scheint es sogar noch weniger zu sein, aber über <code>_setmaxstdio</code> lässt sich das immerhin auf 2048 erhöhen.</p>
</blockquote>
<p>Ganz genau. Default ist 512, was aber nicht das Problem wäre. Das Limit von 2048 bei _setmaxstdio ist das Problem.</p>
<blockquote>
<p>Ich habe mich gerade mal aus Interesse etwas schlau gemacht. Mit der WinAPI kommt mit den Default-Einstellungen auf 10000 offene Handles. Und es gibt Funktionen, mit denen man dies noch weiter erhöhen kann.</p>
</blockquote>
<p>Hm. Wo gibt's da ein 10k Limit? Ich hab ohne irgendwelche Tricks 60k offene Files hinbekommen...</p>
<blockquote>
<p>Bei den Funktionen aus der CRT kommt man allerdings tatsächlich nicht über 2048.<br />
Ich würde da tatsächlich eine eigene filebuf Klasse auf der Grundlage der WinAPI-Funktionen implementieren. So ist es mit minimalen Aufwand möglich, das Programm zu portieren.</p>
</blockquote>
<p>Hm.<br />
Hier müsste ich dann basic_streambuf implementieren, oder wie? Leider hab' ich von der ganzen iostream Geschichte kaum eine Ahnung (also speziell was die lower-level Sachen ala basic_streambuf angeht) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /><br />
Wie kompliziert wäre das? Gibt's da irgendwelche Hilfsteile, z.B. in der Boost? Werde diesbezüglich wohl mal selbst gucken, aber wenn jmd. was weiss, bitte lasst es mich wissen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702822</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2009 19:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 19:02:28 GMT]]></title><description><![CDATA[<p>könnt man ned die crt hacken???????</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702823</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702823</guid><dc:creator><![CDATA[klein kind]]></dc:creator><pubDate>Tue, 28 Apr 2009 19:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 19:50:23 GMT]]></title><description><![CDATA[<p>klein kind schrieb:</p>
<blockquote>
<p>könnt man ned die crt hacken???????</p>
</blockquote>
<p>Klar.<br />
Man könnte sich auch ein Loch ins Knie schiessen, und dann raustrinken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702851</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2009 19:50:23 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 19:51:27 GMT]]></title><description><![CDATA[<p>10k Limit: <a href="http://support.microsoft.com/kb/327699" rel="nofollow">http://support.microsoft.com/kb/327699</a><br />
Scheint aber variabel zu sein.<br />
Simon</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702852</guid><dc:creator><![CDATA[theta]]></dc:creator><pubDate>Tue, 28 Apr 2009 19:51:27 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 19:55:17 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Hm. Wo gibt's da ein 10k Limit? Ich hab ohne irgendwelche Tricks 60k offene Files hinbekommen...</p>
</blockquote>
<p>Das habe ich selbst nur aus einem Forum. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Kann also gut Blödsinn sein. Wie im EIngangspost geschrieben, habe ich nur bedingt Ahnung, und hab mich nur aus Interesse etwas (halb) schlau gemacht.</p>
<p>hustbaer schrieb:</p>
<blockquote>
<p>Hier müsste ich dann basic_streambuf implementieren, oder wie? Leider hab' ich von der ganzen iostream Geschichte kaum eine Ahnung[...]</p>
</blockquote>
<p>Ich gucke morgen noch einmal nach. Vielleicht kann auch einer der Stream-Spezis was Genaueres aus dem Stegreif sagen (Werner?).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702854</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702854</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Tue, 28 Apr 2009 19:55:17 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 20:02:25 GMT]]></title><description><![CDATA[<p>theta schrieb:</p>
<blockquote>
<p>10k Limit: <a href="http://support.microsoft.com/kb/327699" rel="nofollow">http://support.microsoft.com/kb/327699</a><br />
Scheint aber variabel zu sein.<br />
Simon</p>
</blockquote>
<p>scheint sich nur auf user32.dll zu beziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702856</guid><dc:creator><![CDATA[10k]]></dc:creator><pubDate>Tue, 28 Apr 2009 20:02:25 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Tue, 28 Apr 2009 20:45:03 GMT]]></title><description><![CDATA[<p>So.</p>
<p>Hab mir mal die Boost.Iostreams ganz kurz angeguckt. Sieht so aus, als ob da alles drin wäre was ich brauche (und mehr).<br />
<code>boost::iostreams::stream&lt;boost::iostreams::file_descriptor&gt;</code> sieht auf den ersten Blick mal genau nach dem aus, was ich gesucht habe.<br />
Fix &amp; fertig, out-of-the-box gepufferte IO Klasse, auf Basis von OS-Handles! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich werde berichten wie das Ding sich macht. Speziell was Memory-Overhead angeht. Performance werd ich erstmal nicht gröber testen -- solange es deutlich schneller als direkte OS-Calls ist, wird es für meine Zwecke reichen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702873</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 28 Apr 2009 20:45:03 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Wed, 29 Apr 2009 18:12:54 GMT]]></title><description><![CDATA[<p>Aus Spaß an der Sache hab ich da mal was gebastelt: <a href="http://www.speedshare.org/download.php?id=7A98CF9012" rel="nofollow">*klick*</a>. Wie eine streambuf-Lösung aussieht, würde mich aber auch interessieren.</p>
<p>Interface von dem Ding sieht so aus:</p>
<pre><code class="language-cpp">class BufferedFile
{
	public:
		explicit BufferedFile( const std::string&amp; filename, std::ios_base::openmode open_mode );
		~BufferedFile();

		void seek( long long offs, std::ios_base::seek_dir dir=std::ios::beg );

		size_t read( void* buffer, size_t to_read );
		size_t readAt( void* buffer, size_t to_read, long long offs, std::ios_base::seek_dir dir=std::ios::beg );

		size_t write( const void* buffer, size_t to_write );
		size_t writeAt( void* buffer, size_t to_write, long long offs, std::ios_base::seek_dir dir=std::ios_base::beg );

		unsigned long long tell() const;
		unsigned long long size() const;
};
</code></pre>
<p>edit: Mist... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>edit2: Link nochmal rausgenommen, war zu Testzwecken was gefährliches drin, korrigiere morgen</p>
<p>edit3: Ist wieder da und in Ordnung gebracht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1702874</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1702874</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 29 Apr 2009 18:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Wed, 29 Apr 2009 21:56:45 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a>:<br />
Das ist nur die halbe Miete, denn Writes werden garnicht gepuffert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1703395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1703395</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Wed, 29 Apr 2009 21:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Wed, 29 Apr 2009 22:11:10 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13210">@Badestrand</a>:<br />
Das ist nur die halbe Miete, denn Writes werden garnicht gepuffert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Argh, natürlich! Bin bis jetzt mit gepufferten Writes quasi nie direkt in Kontakt gekommen, da hab ich's einfach vergessen.. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Gut. Hm, nagut, hab ich halt ein wenig rumgespielt. Übrigens hab ich auch generell keine Ahnung von Buffering/Caching. Ich weiß, du willst es nur <em>anwenden</em>, aber hast du eventuell Links zu Artikeln? Ist an sich ja ein interessantes Feld.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1703403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1703403</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 29 Apr 2009 22:11:10 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Sat, 02 May 2009 00:50:32 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Nur im Kernel-Mode, über den normalen File-Cache.<br />
100.000x ReadFile mit einem Byte ist allerdings *VIEL* langsamer, als wenn im User-Mode nochmal ein (kleiner) Buffer verwendet wird.<br />
...<br />
jeder einzige ReadFile Befehl führt dazu dass eine User-Mode -&gt; Kernel-Mode Transition stattfindet, ein neuer IRP erstellt wird, der IRP an den zuständigen Treiber übergeben wird, dann irgendwann &quot;bedient&quot;, dann wieder freigegeben, dann wieder eine Kernel-Mode -&gt; User-Mode Transition, und dann irgendwann, 100 Jahre später, kommt ReadFile zurück.<br />
...</p>
</blockquote>
<p>Mich würde interessieren wo du diese detailierten Informationen her hast. Konnte es zwar auch relativ schnell nachschlagen und deine Angaben bestätigen, aber mich würde interessieren ob du dieselbe Quelle verwendest. In den gängigen Büchern zur Win32-API (Petzold, Richter, Hart) steht es jedenfalls nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704305</guid><dc:creator><![CDATA[Nachfrager]]></dc:creator><pubDate>Sat, 02 May 2009 00:50:32 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Sat, 02 May 2009 09:42:21 GMT]]></title><description><![CDATA[<p>Ich habe schon zwei Treiber für Windows 2000/XP geschrieben, und musste mich daher etwas mit der Materie auseinandersetzen. Waren zwar beides keine File-System Treiber, aber mein Verständnis reicht soweit, um zu wissen, dass die grundlegenden Mechanismen die selben sind. Die Informationen hab' ich zum Teil aus der DDK Dokumentation, der Compuware DriverWorks Dokumentation, und zum Teil von äusserst hilfreichen Leuten über die &quot;ntdev&quot; Mailing-List von OSR Online (<a href="http://www.osronline.com/" rel="nofollow">http://www.osronline.com/</a>).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704355</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704355</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 02 May 2009 09:42:21 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Sat, 02 May 2009 11:15:03 GMT]]></title><description><![CDATA[<p>Klar, ich Trottel, Treiberentwicklung. In der entsprechenden Literatur finden sich dann auch die Informationen. Daran hab ich nicht gedacht. Danke für den Hinweis.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704379</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704379</guid><dc:creator><![CDATA[Nachfrager]]></dc:creator><pubDate>Sat, 02 May 2009 11:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Sun, 03 May 2009 20:05:09 GMT]]></title><description><![CDATA[<p>Nachfrager schrieb:</p>
<blockquote>
<p>Klar, ich Trottel,</p>
</blockquote>
<p>Wieso Trottel <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
War doch ne ganz normale Frage...<br />
(Und ne ganz normale Antwort)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1704990</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1704990</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 03 May 2009 20:05:09 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Sun, 03 May 2009 23:24:36 GMT]]></title><description><![CDATA[<p>Nein, ich hab mich nur geärgert, weil der Groschen bei mir so spät (erst nachdem ich nachgefragt hatte) gefallen ist.</p>
<p>Ich stand nämlich nach deinem Beitrag vor meinem Regal und dachte: Wenn ich das jetzt genau wissen will, wo würde ich nachschlagen? Dann habe ich kurz 3 Bücher zur Win32 API durchgeblättert bevor mein Auge auf das Buch von Russinovich &amp; Solomon fiel. Darin wird es zwar erklärt, aber das ist ja eigentlich kein typisches Buch für Programmierer.</p>
<p>Und &quot;Trottel&quot; deswegen, weil ich nicht selbst darauf gekommen bin mal im Buch von Walter Oney nachzuschlagen, wo es ja wirklich groß und breit behandelt wird. Erst als ich in deinem Beitrag das Wort &quot;Treiber&quot; las, hat es bei mir klick gemacht, gefolgt von einem leichten Schlag mit der flachen Hand gegen die Stirn. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Manchmal verliert man in dem Informationsdschungel den Überblick ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705062</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705062</guid><dc:creator><![CDATA[Nachfrager]]></dc:creator><pubDate>Sun, 03 May 2009 23:24:36 GMT</pubDate></item><item><title><![CDATA[Reply to Suche Buffered-File Klasse on Mon, 04 May 2009 01:29:31 GMT]]></title><description><![CDATA[<p>OK. Du darfst dich natürlich selbst nennen wie du magst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Ich fand die Frage auf jeden Fall nicht dumm/unberechtigt/... .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705073</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 04 May 2009 01:29:31 GMT</pubDate></item></channel></rss>