<?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[Mit zwei Programmen in die selbe Datei schreiben.]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>in meinem momentanen Projekt befinden sich zwei Programme A und B. Diese schreiben ihre Logs und Errors in Dateien. Dazu habe ich die entsprechenden Streams umgebogen:</p>
<pre><code class="language-cpp">clog.rdbuf(logFile.rdbuf());
cerr.rdbuf(errFile.rdbuf());
</code></pre>
<p>logFile und errFile sind zwei ofstreams die mit den Attributen ios::out | ios::app geladen werden.</p>
<p>Das Ganze ist nun noch gekapselt in eine Klasse, welche die Funktionen raiseError(), welche nach dem Loggen der Fehlermeldung mittels exit(-1) das Programm beendet, und log(), welche einfach nur Meldungen loggt, bereitstellt.</p>
<p>Da ich nun entschieden habe, nicht vier verschiedene Logfiles zu haben, habe ich spaßeshalber logFile und errFile in beiden Programmen mit dem selben Dateinamen initialisiert.</p>
<p>Momentan ist es so, dass Programm A das Programm B aufruft und ich hab eigentlich erwartet, dass mir B sagt, es könne die Datei nicht Öffnen, da A die Datei bereits exklusiv geöffent hat. Dem ist aber nicht so...</p>
<p>Warum? Ist das zufällig so, oder wird intern die Datei für jeden &lt;&lt; Operator neu geöffnet und geschlossen? Liegt das vllt am OS(debian), welches das sauber steuert?</p>
<p>Also es interessiert mich, ob ich das tatsächlich so verwenden kann oder ich die Dateien immer in den raiseError() und log() explizit öffnen und schließen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/192265/mit-zwei-programmen-in-die-selbe-datei-schreiben</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 10:01:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192265.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Sep 2007 11:46:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mit zwei Programmen in die selbe Datei schreiben. on Wed, 12 Sep 2007 11:46:03 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>in meinem momentanen Projekt befinden sich zwei Programme A und B. Diese schreiben ihre Logs und Errors in Dateien. Dazu habe ich die entsprechenden Streams umgebogen:</p>
<pre><code class="language-cpp">clog.rdbuf(logFile.rdbuf());
cerr.rdbuf(errFile.rdbuf());
</code></pre>
<p>logFile und errFile sind zwei ofstreams die mit den Attributen ios::out | ios::app geladen werden.</p>
<p>Das Ganze ist nun noch gekapselt in eine Klasse, welche die Funktionen raiseError(), welche nach dem Loggen der Fehlermeldung mittels exit(-1) das Programm beendet, und log(), welche einfach nur Meldungen loggt, bereitstellt.</p>
<p>Da ich nun entschieden habe, nicht vier verschiedene Logfiles zu haben, habe ich spaßeshalber logFile und errFile in beiden Programmen mit dem selben Dateinamen initialisiert.</p>
<p>Momentan ist es so, dass Programm A das Programm B aufruft und ich hab eigentlich erwartet, dass mir B sagt, es könne die Datei nicht Öffnen, da A die Datei bereits exklusiv geöffent hat. Dem ist aber nicht so...</p>
<p>Warum? Ist das zufällig so, oder wird intern die Datei für jeden &lt;&lt; Operator neu geöffnet und geschlossen? Liegt das vllt am OS(debian), welches das sauber steuert?</p>
<p>Also es interessiert mich, ob ich das tatsächlich so verwenden kann oder ich die Dateien immer in den raiseError() und log() explizit öffnen und schließen sollte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1363955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1363955</guid><dc:creator><![CDATA[noNeed 4 aNick]]></dc:creator><pubDate>Wed, 12 Sep 2007 11:46:03 GMT</pubDate></item><item><title><![CDATA[Reply to Mit zwei Programmen in die selbe Datei schreiben. on Wed, 12 Sep 2007 12:31:30 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich denke, dass unabhängig davon ob das funktioniert oder nicht, es kein guter Stil ist. Aber du musst schon selber dafür sorgen, dass die Datei gesperrt und wieder freigegeben wird. Dann musst du aber auch aufpassen, dass keine Deadlocks entstehen.</p>
<p>Ich sehe da ein paar Möglichkeiten:</p>
<ul>
<li>Entweder du änderst deine Programme dahingehend, dass sie threadbasierend sind. Dann kannst du z.B. <a href="http://www.boost.org/doc/html/thread.html" rel="nofollow">http://www.boost.org/doc/html/thread.html</a> nutzen und die Dateien synchronisieren</li>
<li>Du benutzt IPC (Interprocess Communication) des Betriebssystem. Damit kannst du deine Programme untereinander kommunizieren lassen, und eben selber sperren ein- und ausschalten, allerdings ist das dann eben vom Betriebssystem abhängig</li>
<li>Du benutzt <a href="http://linux.die.net/man/2/flock" rel="nofollow">http://linux.die.net/man/2/flock</a></li>
<li>Du schreibst keine eigenen Logdateien, sondern nutzt (unter Linux) den Syslog Daemon: <a href="http://man.cx/syslog(3)/de" rel="nofollow">http://man.cx/syslog(3)/de</a></li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1363976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1363976</guid><dc:creator><![CDATA[CarstenJ]]></dc:creator><pubDate>Wed, 12 Sep 2007 12:31:30 GMT</pubDate></item><item><title><![CDATA[Reply to Mit zwei Programmen in die selbe Datei schreiben. on Wed, 12 Sep 2007 12:35:05 GMT]]></title><description><![CDATA[<p>Wie hast du die Datei denn exklusiv geoeffnet? Bist du dir sicher, dass du das auch wirklich hast? Du musst das Mutex naemlich selbst &quot;implementieren&quot;, z.B. mit dem System-Call fcntl().</p>
<p><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="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1363978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1363978</guid><dc:creator><![CDATA[Ajaw]]></dc:creator><pubDate>Wed, 12 Sep 2007 12:35:05 GMT</pubDate></item><item><title><![CDATA[Reply to Mit zwei Programmen in die selbe Datei schreiben. on Wed, 12 Sep 2007 12:39:57 GMT]]></title><description><![CDATA[<p>noNeed 4 aNick schrieb:</p>
<blockquote>
<p>Warum? Ist das zufällig so, oder wird intern die Datei für jeden &lt;&lt; Operator neu geöffnet und geschlossen? Liegt das vllt am OS(debian), welches das sauber steuert?</p>
</blockquote>
<p>Das liegt an der Laufzeitungumgebung des Compilers und an der Plattform. Lies Dir mal die manpage zu &quot;fcntl&quot; durch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1363982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1363982</guid><dc:creator><![CDATA[*john 0]]></dc:creator><pubDate>Wed, 12 Sep 2007 12:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Mit zwei Programmen in die selbe Datei schreiben. on Wed, 12 Sep 2007 20:06:59 GMT]]></title><description><![CDATA[<p>Ich denke ich würde die sache mit einer Art empfängerprogramm implementieren, also ein Programm, welches mit den anderen Kommuniziert, und die Streams abfängt, und dann selbst in die Datei packt, so gibt es nur ein Programm aus sicht des OS, welches auf die Datei zugreift.</p>
<p>Edit: ich hab grade gelesen, dass Linux die gleichzeitige Bearbeitung einer Datei von mehreren Programmen bearbeitet, aber ich hab kein plan wie.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1364262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1364262</guid><dc:creator><![CDATA[Krux]]></dc:creator><pubDate>Wed, 12 Sep 2007 20:06:59 GMT</pubDate></item></channel></rss>