[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: On recent windows fileno return -2 in case of closed stdin, stdout,
From: |
Bruno Haible |
Subject: |
Re: On recent windows fileno return -2 in case of closed stdin, stdout, stderr |
Date: |
Mon, 06 Apr 2020 20:32:32 +0200 |
User-agent: |
KMail/5.1.3 (Linux/4.4.0-174-generic; KDE/5.18.0; x86_64; ; ) |
Hi Bastien,
> according to
> https://docs.microsoft.com/fr-fr/cpp/c-runtime-library/reference/fileno?view=vs-2019
>
> If stdout or stderr is not associated with an output stream (for
> example, in a Windows application without a console window), the file
> descriptor returned is -2. In previous versions, the file descriptor
> returned was -1. This change allows applications to distinguish this
> condition from an error.
Indeed, that's a deviation from POSIX [1].
> This should be mentionned in the doc:
> A work arround is to create a console at the beginning of the program
> and close the window.
>
> if(AllocConsole())
> {
> freopen ("CONOUT$", "w", stdout);
> freopen ("CONOUT$", "w", stderr);
> ShowWindow (FindWindowA ("ConsoleWindowClass", NULL), false);
> }
The programs for which gnulib is most often used (coreutils etc.) don't
deal with consoles and windows directly; they just use stdout, stderr
as they are.
So the workaround would have to be in a 'fileno' module.
Would you like to contribute such a 'fileno' module?
Bruno
[1] https://pubs.opengroup.org/onlinepubs/9699919799/functions/fileno.html