Both Suse 9.3 (gcc 3.3.5/x86_64) and 10.0 (gcc 4.0.2/x86_64) exhibit this same problem -- open an fstream with out|in will not actually create the file. Strace shows that O_CREAT is not passed to open() when out|in is used, but is if just 'out' is used. This is a rehash of bug #5629 which is claimed to be fixed but apparently isn't.
#include <fstream> using std::fstream; int main(int argc,char **argv) { fstream f; f.open("test-1",fstream::binary | fstream::out ); f.close(); f.open("test-2",fstream::binary | fstream::out | fstream::in ); f.close(); return 0; } [EMAIL PROTECTED]:~/src$ strace ./test 2>&1 | grep open | grep test open("test-1", O_WRONLY|O_CREAT|O_TRUNC, 0666) = 3 open("test-2", O_RDWR) = -1 ENOENT (No such file or directory) -- Summary: fstream class is unable to create file in a read/write mode Product: gcc Version: 4.0.2 Status: UNCONFIRMED Severity: normal Priority: P2 Component: libstdc++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: ssmith at cemaphore dot com GCC build triplet: x86_64-suse-linux GCC host triplet: x86_64-suse-linux GCC target triplet: x86_64-suse-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=24320