Date: Sun, 12 Aug 2001 13:48:15 +0200 From: Gabriel Ambuehl <gabriel_ambuehl@buz.ch> To: freebsd-questions@freebsd.org Subject: write() failing.. Message-ID: <94356165699.20010812134815@buz.ch>
next in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE----- Hello, I've there got a problem with write() which is failing for a reason I can't figure out: #include <sys/types.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> //C++ STL #include <map> #include <string> class class_logfiles { private: map<string, int> files; public: int write_to_log(const string &logfile_path, const string &message); //class_logfiles(void): default constructor }; int class_logfiles::write_to_log(const string &logfile_path, const string &message) { map<string, int>::iterator miter; miter = this->files.find(logfile_path); if(miter == this->files.end()) // there isn't any open logfile with logfile_path { int current_des; current_des=open((const char *) logfile_path.c_str(), O_APPEND | O_CREAT | O_EXLOCK | O_NOFOLLOW); cout << "current_des " << current_des << " errno " << errno << " path " << logfile_path.c_str()<< endl; this->files[logfile_path]=current_des; cout << "write exit status: " << write(current_des, message.data(), message.size()) << flush; cout << " errno: " << errno << " des " << current_des <<endl; } else { cout << "write exit status: " << write((*miter).second, message.data(), message.size()) << flush; cout << " errno: " << errno << " des " << (*miter).second<<endl; } return 0; } int main () { class_logfiles logfiles; string path="/var/log/some_log"; string message="hello world"; logfiles.write_to_log((const string &) path, (const string &) message); logfiles.write_to_log((const string &) path, (const string &) message); return 0; } The above compiled with g++ and run under 4.4 RC will result in the following output current_des 3 errno 0 path /var/log/some_log write exit status: -1 errno: 0 des 3 write exit status: -1 errno: 9 des 3 which I can't exactly understand as a failing write() should set errno but the first time errno remains zero, whereas the second time it complains about an invalid file descriptor but open did return a valid descriptor... What's going on here? Any comments would be greatly appreciated. TIA & best regards, Gabriel ingx‰#x‰#@ -----BEGIN PGP SIGNATURE----- Version: PGP 6.5i iQEVAwUBO3Ze88Za2WpymlDxAQExwAf+M0r6jjxcQLav2OaLnr06jf76wNM7O2NY vcg5mU5RLsCZSIRw+oAucJpuH/8Vw+wOztUeFOoN3CxtmfsnKoWzjIaB0kqxnsS9 GYWTKvrqm4Eg88V+t/UHUP0eoPQ3d6SrsPYhSE3UnVye32giaZdV8lpiXZVoRKjM FXEqmDiBW9O3WjB+aYnaQhoQrLdcs8TvKrQoyy7cYPtQiDAgAKg53xCHR8v63KJh Me8kBtue+kwuKrev/9KC/aQqEu8hZaBTA/ye7EteNBFZ7nA52OXDD/fV12quXIIR 6nHxbCXl6HTUNhGTdYo9sPOA25y9wC+A4D0WkMCuW7qtCm7IPSDltQ== =3Ggu -----END PGP SIGNATURE----- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?94356165699.20010812134815>