Re: Use both C/C++ library?
On Apr 10, 5:20 pm, Immortal Nephi <Immortal_Ne...@hotmail.com> wrote:
C Run-Time Library has most functions available to all
platforms such as Windows, Mac OSX, and Linux. Some functions
start one underscore before function name ( _funcname() ) are
Microsoft Specification. Some functions are not the same as
Mac OSX and Linux have.
What is meant by "the C run-time library" depends somewhat on
context. In a discussion of the language, I would presume it to
mean "the library functions defined in the C standard". In a
more general context, I use the term for libc.so or its
equivalent under Windows: a library which contains a lot of
functions which are not standard C, and at least under Unix,
doesn't include all of the standard C library functions. (Some
are in libm.so.)
From what you say, I presume you mean this latter meaning. In
which case, the libraries are very different from one platform
to the other. For any discussion of this, you really should ask
in a newsgroup specific to the platform.
C++ iostream library uses some C Run-Time library functions
such as file management.
The C++ iostream library (at least filebuf and the istream and
ostream which use it) are defined in terms of the C library.
It only has open() and close(), but it does not have
additional file functions such as rename, delete, display
directory, change file size, etc.
It has rename and delete (called remove). There's no portable
way of reading a directory, short of using a third party library
(e.g. Boost), and there are, or at least were, systems where the
only way of changing the file size is writing data to the end of
it. (This was the case in early Unix, which explains why the
standard didn't require it: there was no way they were going to
standardize a C language which couldn't be implemented under
Unix.)
The file management in C++ iostream library has limited error
reporting message. The error message tells that file can't be
opened, but it does not specify more details such as disk is
full or file is corrupted or file does not exist.
This is a general problem in C and in C++ (certainly
conditionned by the fact that it is also a problem in Unix and
Windows). There is always errno, but for the most part, the
possible error codes are implementation defined, and will never
be set if e.g. the read or write finally succeeds. (When
reading from a remote file system, for example, it might be
useful to know that the buffer had to be resent several times.)
Do you suggest to use both C Run-Time library and C++ iostream
library when you want to write your code to work all
platforms?
As far as possible. In practice, server software will probably
only be able to use filebuf for less important aspects, like
logging. (Filebuf has no facilities for synchronized writing.)
C Run-Time library should have full error reporting
management from all operating systems.
They do, via errno. But it's limited, and it's very
implementation dependent. (Necessarily, since different OS's
report errors differently.)
--
James Kanze