Gert Doering wrote in
<Y/PHnwAkzq29I9G4 at greenie.muc.de>:
|Hi,
|
|On Mon, Feb 20, 2023 at 08:00:24PM +0100, Steffen Nurpmeso wrote:
|> J?rg Schilling however convinced me that the standard requires
|> this behaviour, and it is also in the C FAQ. Nonetheless...
|
|Do you have references for this?
Hm, mail in between me and J?rg from 2017-05-02.
| |Davor kann ich nur warnen. Das stdio in Solaris geht auf die
| |Originalimplementierung aus der Zeit um 1976 zur?ck. Es ist also 40 \
| |Jahre alter
| |und auch st?ndig verifizierter Code.
|
|Oh, mein C++ ist auch ziemlich gut.
|
| |>|Au?erdem: Nach einem read() mu? man fflush() aufrufen bevor man
schreiben \
| |>|\
| |>|darf
| |>|und umgekehrt auch.
| |>
| |> Wo steht das? Wirklich? Ich habe stdio nie benutzt, bis ich nail
| |
| |Das steht leider nicht im POSIX standard (das halte ich f?r einen Bug) \
| |aber es
| |ist im C-Standard.....
|
|Du hast mich ?berzeugt, in der C FAQ steht es auch.
Maybe i was a bit over-forgiving as the C FAQ how i have it
locally says
12.30: I'm trying to update a file in place, by using fopen mode
"r+",
reading a certain string, and writing back a modified string,
but it's not working.
A: Be sure to call fseek before you write, both to seek back to the
beginning of the string you're trying to overwrite, and because
an fseek or fflush is always required between reading and
writing in the read/write "+" modes. Also, remember that
you
From: scs at eskimo.com (Steve Summit)
Newsgroups: comp.lang.c,comp.lang.c.moderated,comp.answers,news.answers
Subject: comp.lang.c Answers to Frequently Asked Questions (FAQ List)
Date: 3 Jul 2004 23:27:33 GMT
Organization: better late than never
Message-ID: <2004Jul03.1927.scs.0003 at eskimo.com>
...
| |> Die Test-Suite scheint mir wirklich l?chrig zu sein.
| |> Sag, ist das ein Fehler, oder nicht? Und wenn ja, was mach ich
| |> damit? Br?uchte das gar eine Klarstellung im Standard?
| |
| |Wie gesagt: im C-Standard steht, da? zwischen dem ?ndern der I/O Richtung
| |fflush() zu rufen ist.
...
| |In der Funktion, die Du erw?hnst ist es aber falsch, denn da wird eben \
| |nicht
| |immer zwischen einem read und einem write fflush() gerufen.
| |Zwischen einem write und einem read mu? es nat?rlich auch geschehen.J?rg
I personally stand to my opinion quoted from my commit message
"which i consider a bug in Solaris stdio", but i was talking to
J?rg, and doing it the way he said fixed the problem. (I have no
idea of stdio and would only fflush after writing, say.)
Anyhow it was no later but 2021-11-11 that i once again had to fix
something in J?rg's spirit
commit 7b8ac94bf7cc6a97cc2c6d799cab07218e693377
Author: Steffen Nurpmeso <steffen at sdaoden.eu>
AuthorDate: 2021-11-11 21:27:04 +0100
...
n_folder_mbox_prepare_append(): fix it on SunOS (J?rg Schilling, RIP!)
...
- if((needsep && putc('\n', fout) == EOF) || fflush(fout) ==
EOF)
+ if((needsep && (fseek(fout, 0L, SEEK_END) || putc('\n',
fout) == EOF)) ||
+ fflush(fout) == EOF)
...
--steffen
|
|Der Kragenbaer, The moon bear,
|der holt sich munter he cheerfully and one by one
|einen nach dem anderen runter wa.ks himself off
|(By Robert Gernhardt)