I may call my program like this:
1. ./main solved.txt
2. cat unsolved.txt | ./main
3. cat unsolved.txt | ./main solved.txt
I am using this to know whether I need to read data from the pipe line or not on C POSIX Standard:
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <unistd.h>
int main( int argumentsCount, char* argumentsStringList[] )
{
std::stringstream inputedPipeLineString;
if( argumentsCount > 1 )
{
printf( "argumentsStringList[1]: %s", argumentsStringList[ 1 ] );
}
// If it is passed input through the terminal pipe line, get it.
if( !isatty( fileno( stdin ) ) )
{
// Converts the std::fstream "std::cin" to std::stringstream which natively
// supports conversion to string.
inputedPipeLineString << std::cin.rdbuf();
printf( "inputedPipeLineString: %s", inputedPipeLineString.str().c_str() );
}
}
But now I want to use the C++ 11 Standard, and my loved fileno
and isatty
are out of it. So there is an alternative to them on the C++ 11?
Related threads:
The problem is that when compiling with the -std=C++11
, the fileno
and isatty
are undefined on the stdio.h/cstdlib
because they are POSIX stuff. So, one solution would be to use -std=GNU++11
instead of -std=C++11
. But is it possible to write something else to compile using the -std=C++11
?
C++ POSIX Standard
As far as I know, there is no such thing. There is a C POSIX library, which is part of POSIX standard.
So there is an alternative to them on the C++ 11?
There is no alternative in standard C++ (not before C++11, so far not after either).
You will need to depend on POSIX to get the functionality that you need.
Even in POSIX, it is the unistd.h
which defines isatty
. You've neglected to include it in your program.