我可以这样称呼我的程序:
1. ./main solved.txt
2. cat unsolved.txt | ./main
3. cat unsolved.txt | ./main solved.txt
我正在使用它来知道我是否需要在C POSIX标准上读取管道数据:
#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() );
}
}
但是现在我想使用C ++ 11标准版,而我所爱的fileno
和isatty
已经不在了。那么在C ++ 11上有一个替代方案吗?
相关主题:
问题是,在使用-std=C++11
进行编译时,fileno
上的isatty
和stdio.h/cstdlib
未定义,因为它们是POSIX内容。因此,一种解决方案是使用-std=GNU++11
而不是-std=C++11
。但是可以使用-std=C++11
编写其他东西进行编译吗?
答案 0 :(得分:8)
C ++ POSIX标准
据我所知,没有这样的事情。有一个 C POSIX库,它是POSIX标准的一部分。
所以在C ++ 11上有替代它们吗?
标准C ++中没有其他选择(不是在C ++ 11之前,到目前为止都没有)。
您需要依赖POSIX来获得所需的功能。
即使在POSIX中,unistd.h
定义了isatty
。你忽略了将它包含在你的程序中。
答案 1 :(得分:2)
我不知道一种完全可移植的方法。据我所知,标准C ++不知道它的输入来自哪里,所以如果你正在使用posix系统,你应该只使用isatty
。