Gibt es irgendeine Regelung in der Programmiersprache C, die besagt,
dass man bei einer Ausgabe (stdout) die Escape Sequenz \n erst am Ende
der Zeile schreiben muss?
Eine generelle Frage noch: Wie wird eigentlich der stdout gepuffert?
Sprich wann wird der Puffer ausgegeben?
Zum Beispiel wenn der Befehl
printf("Hallo Welt\n");
steht, was passiert wie?
Patricia schrieb: > Gibt es irgendeine Regelung in der Programmiersprache C, die besagt, > dass man bei einer Ausgabe (stdout) die Escape Sequenz \n erst am Ende > der Zeile schreiben muss? Es gibt nur eine Regelung: Wenn die stdout gepuffert ist, UND ein \n ausgegeben wird, DANN muss dieser Puffer vom I/O System geleert werden. Ansonsten: Du kannst ausgeben, was und in welcher Reihenfolge du auch immer willst. > Eine generelle Frage noch: Wie wird eigentlich der stdout gepuffert? Das entscheidet dein I/O System. C an sich interessiert sich nicht dafür > Sprich wann wird der Puffer ausgegeben? Wann immer das I/O System das als richtig erachtet. Die einzige Forderung, die C erhebt ist: bei einem \n sind eventuell gepufferte Zeichen tatsächlich auszugeben.
Das ich nicht lüge. In meinem Hinterkopf schwirrt da noch so ein Gedanke rum, der eine Verknüpfung zwischen stdout und stdin postuliert. D.h. der Buffer wird auch dann ausgegeben, wenn eine Einlesenoperation über stdin gestartet wird. So eine Verknüpfung ist natürlich sinnvoll, aber ich bin mir nicht 100% sicher, ob das vom C-Standard tatsächlich gefordert wird oder nicht.
Patricia schrieb: > Gibt es irgendeine Regelung in der Programmiersprache C, die besagt, > dass man bei einer Ausgabe (stdout) die Escape Sequenz \n erst am Ende > der Zeile schreiben muss? Das ist etwas merkwürdig formuliert, denn es ist eher umgekehrt. Wenn du irgendwo \n schreibst, wird das automatisch als Zeilenende interpretiert. Damit ergibt sich von selbst, daß \n erst am Ende der Zeile ist. Wenn danach noch was kommt, steht das halt in der nächsten Zeile. Karl Heinz Buchegger schrieb: > Es gibt nur eine Regelung: > Wenn die stdout gepuffert ist, UND ein \n ausgegeben wird, DANN muss > dieser Puffer vom I/O System geleert werden. Aber auch nur, wenn es "line buffered" ist. Karl Heinz Buchegger schrieb: >> Eine generelle Frage noch: Wie wird eigentlich der stdout gepuffert? > > Das entscheidet dein I/O System. > C an sich interessiert sich nicht dafür Das stimmt nicht ganz. Es gibt sogar eine Standard-Funktion um das Buffering umzustellen, auch wenn das nicht zwingend von jeder Plattform untestützt werden muss. Hier mal ein Auszug aus C99: ******************************************************************* When a stream is unbuffered, characters are intended to appear from the source or at the destination as soon as possible. Otherwise characters may be accumulated and transmitted to or from the host environment as a block. When a stream is fully buffered, characters are intended to be transmitted to or from the host environment as a block when a buffer is filled. When a stream is line buffered, characters are intended to be transmitted to or from the host environment as a block when a new-line character is encountered. Furthermore, characters are intended to be transmitted as a block to the host environment when a buffer is filled, when input is requested on an unbuffered stream, or when input is requested on a line buffered stream that requires the transmission of characters from the host environment. Support for these characteristics is implementation-defined, and may be affected via the setbuf and setvbuf functions. *******************************************************************
Ja, genau. setbuf Danke für die Auffrischung meines Gedächtnisses.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.