My overall objective (motivation for the question):
To provide an executable ìo
, from C/C++ compilation/linking, so that a user can execute it alternatively as:
io 3> myout.txt
. In this casemyout.txt
would contain whatever I explicitly send to FD=3 from within my code.io
. In this case an error message is displayed indicating the user the need for3> ...
. (Another option is simply losing that output, I still have to decide which is the best option).
I also need to be able to write to stdout/stderr at the same time.
As I see it, if I cannot tell the user "hey, the FD you have to redirect is #3", he cannot be certain he will actually capture the output. So, I conclude I have to hardcode FD=3 (wrong conclusion? how to achieve the objective otherwise?).
That was asked in Smart-write to arbitrary file descriptor from C/C++, and I am following here the indication of SO: "Your post has been associated with similar questions. If these questions don’t resolve your question, ask a new one." ... and here I am.
I admit to being frustrated by my inability to effectively convey my doubts, or otherwise to understand the comments. I could not find a solution to the description above, and this is hopefully a fruitful alternative attempt.
There are quite a few issues that were brought by this, and I asked a few related questions (listed at the bottom). Even if none of the questions received an answer, from the comments posted I ended up quite confused. In particular, I summarized here a specific fundamental question (and that is why I think this is not a dupe):
Can one write C/C++ code that safely and successfully writes to a hand picked file descriptor number, other than FD=0,1,2? (I guess this is the only way to satisfy the objective stated at the top). That would be something like
int main() {
const int fd = 3;
and then writing to fd
with either
ssize_t nbytes = write(fd, ...
or
FILE * fp = fdopen(fd, "a"); /* or some other mode */
fprintf(fp, ...
(and there may be other ways).
In Smart-write to arbitrary file descriptor from C/C++, I posted code that included this usage, and comments posted suggested a way of completing code (even though I did not manage to make it work).
In any case, it would be ok to use a hand picked fd
number.
In Safety check prior to using fdopen, comments posted suggested I shouldn't ever use a hand picked fd
number.
I am then confused about this.
My third related question is Correct way of using fdopen