Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.c++ > #82872
| From | "Alf P. Steinbach" <alf.p.steinbach@gmail.com> |
|---|---|
| Newsgroups | comp.lang.c++ |
| Subject | Re: Hello World in Russian |
| Date | 2022-01-30 14:02 +0100 |
| Organization | A noiseless patient Spider |
| Message-ID | <st628v$als$1@dont-email.me> (permalink) |
| References | <i6GdnUGdpJgzJGn8nZ2dnUU7-KnNnZ2d@giganews.com> <st362k$ham$1@dont-email.me> <st3n3o$cn4$1@dont-email.me> <st5hll$ppo$1@dont-email.me> <87tudle826.fsf@bsb.me.uk> |
On 30 Jan 2022 13:12, Ben Bacarisse wrote:
> "Alf P. Steinbach" <alf.p.steinbach@gmail.com> writes:
>
>> My opinion is that C (and hence also C++) text mode is an abomination
>> that should never have been introduced, and that in addition, given
>> that it was introduced, it's designed in a stupid way with the data
>> conversion applied underneath the buffer level so that one can't get a
>> clear view of the raw data.
>>
>> As an example, the design means that Unix `cat` can't be faithfully
>> implemented in Windows using only standard C or C++, which IMO is
>> extreme.
>
> I assume you are talking about the cases where cat defaults to reading
> stdin and/or writing stdout, If so, it could be argued that it's not the
> fault of the C and C++ standards, but more the fault of the
> implementations not providing a useful freopen function.
>
> But then maybe freopen simply can't be implemented in Windows for some
> mysterious reason I don't get.
I guess you're talking about using standard C++ code with some system
specific knowledge such as how to specify the standard input stream as a
file name.
To reopen the standard input so that it connects to the original source,
which might a pipe or a file or the console, one needs to (1) identify
that source, and (2) open that source, possibly after closing the
original connection. Neither is feasible in general, even (AFAIK) in
Unix environment. But one might attempt to sidestep (1) by using a
filename that in the relevant OS denotes standard input.
A demonstration of an approach that fails is not a proof that no
solution exists, e.g. failure to open a door doesn't prove that the door
is stuck. Maybe the person just failed to consider using the doorknob,
dragged the door instead of pushing, failed to note that it opens
sideways, didn't swipe the id card, deliberately made it look as if the
door didn't open, or something. But anyway I cooked up some code:
#include <stdlib.h> // EXIT_...
#include <stdio.h>
#include <stdexcept> // std::runtime_error, std::exception
#include <string> // std::string
using namespace std;
#ifdef PORTABLE
constexpr bool portable = true;
#else
constexpr bool portable = false;
#endif
auto fail( const string& s ) -> bool { throw runtime_error( s ); }
void cpp_main()
{
if constexpr( portable ) {
freopen( nullptr, "rb", stdin ) or fail( "freopen(stdin) failed" );
freopen( nullptr, "wb", stdout ) or fail( "freopen(stdout)
failed" );
} else {
freopen( "conin$", "rb", stdin ) or fail( "freopen(stdin)
failed" );
freopen( "conout$", "wb", stdout ) or fail( "freopen(stdout)
failed" );
}
}
auto main() -> int
{
fprintf( stderr, "%s\n", (portable? "Portable code" :
"Windows-specific code") );
try {
cpp_main();
return EXIT_SUCCESS;
} catch( const exception& x ) {
fprintf( stderr, "!%s\n", x.what() );
}
return EXIT_FAILURE;
}
It fails both as both portable code and as Windows-specific code (here
"cl" is the Visual C++ compiler):
[C:\root\temp]
> cl x.cpp
x.cpp
[C:\root\temp]
> x
Windows-specific code
[C:\root\temp]
> echo blah | x
Windows-specific code
The process tried to write to a nonexistent pipe.
[C:\root\temp]
> cl x.cpp /D PORTABLE
x.cpp
[C:\root\temp]
> x
Portable code
!freopen(stdin) failed
So.
- Alf
Back to comp.lang.c++ | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
Hello World in Russian Joseph Hesse <joeh@gmail.com> - 2022-01-29 05:51 +0200
Re: Hello World in Russian James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-01-28 23:27 -0500
Re: Hello World in Russian Muttley@dastardlyhq.com - 2022-01-29 10:21 +0000
Re: Hello World in Russian Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-01-28 22:42 -0800
Re: Hello World in Russian David Brown <david.brown@hesbynett.no> - 2022-01-29 13:01 +0100
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-29 14:12 +0100
Re: Hello World in Russian David Brown <david.brown@hesbynett.no> - 2022-01-29 17:34 +0100
Re: Hello World in Russian James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-01-30 14:17 -0500
Re: Hello World in Russian Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-01-30 20:17 -0800
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-29 11:48 +0100
Re: Hello World in Russian Paavo Helde <eesnimi@osa.pri.ee> - 2022-01-29 17:39 +0200
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-30 09:18 +0100
Re: Hello World in Russian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-01-30 12:12 +0000
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-30 14:02 +0100
Re: Hello World in Russian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-01-30 14:45 +0000
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-30 21:53 +0100
Re: Hello World in Russian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-01-30 21:00 +0000
Re: Hello World in Russian James Kuyper <jameskuyper@alumni.caltech.edu> - 2022-01-30 14:02 -0500
Re: Hello World in Russian Muttley@dastardlyhq.com - 2022-01-31 10:23 +0000
Re: Hello World in Russian scott@slp53.sl.home (Scott Lurndal) - 2022-01-31 16:11 +0000
Re: Hello World in Russian Muttley@dastardlyhq.com - 2022-01-31 16:36 +0000
Re: Hello World in Russian Paavo Helde <eesnimi@osa.pri.ee> - 2022-01-31 20:20 +0200
Re: Hello World in Russian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-01-31 16:12 +0000
Re: Hello World in Russian Muttley@dastardlyhq.com - 2022-01-31 16:39 +0000
Re: Hello World in Russian Ben Bacarisse <ben.usenet@bsb.me.uk> - 2022-01-31 23:47 +0000
Re: Hello World in Russian Manfred <noname@add.invalid> - 2022-01-31 16:45 +0100
Re: Hello World in Russian Andrey Tarasevich <andreytarasevich@hotmail.com> - 2022-01-31 10:10 -0800
Re: Hello World in Russian "Alf P. Steinbach" <alf.p.steinbach@gmail.com> - 2022-01-31 19:25 +0100
Re: Hello World in Russian Marcel Mueller <news.5.maazl@spamgourmet.org> - 2022-01-30 12:09 +0100
Re: Hello World in Russian Paavo Helde <eesnimi@osa.pri.ee> - 2022-01-30 14:26 +0200
Re: Hello World in Russian Richard Damon <Richard@Damon-Family.org> - 2022-01-30 08:59 -0500
Re: Hello World in Russian Paavo Helde <eesnimi@osa.pri.ee> - 2022-01-30 18:21 +0200
Re: Hello World in Russian Richard Damon <Richard@Damon-Family.org> - 2022-01-30 12:56 -0500
Re: Hello World in Russian Vir Campestris <vir.campestris@invalid.invalid> - 2022-02-07 21:05 +0000
csiph-web